code: protected void configureCurseWords (String curseWords)
      {
          StringTokenizer st = new StringTokenizer(curseWords);
          int numWords = st.countTokens();
  
          _matchers = new Matcher[numWords];
          _replacements = new String[numWords];
          _vernacular = new String[numWords];
          _comicLength = new int[numWords];
  
          for (int ii=0; ii < numWords; ii++) {
              String mapping = st.nextToken();
              StringTokenizer st2 = new StringTokenizer(mapping, "=");
              if (st2.countTokens() != 2) {
                  log.warning("Something looks wrong in the x.cursewords properties (" +
                      mapping + "), skipping.");
                  continue;
              }
              String curse = st2.nextToken();
  
              String s = "";
              String p = "";
              if (curse.startsWith("*")) {
                  curse = curse.substring(1);
                  p += "([\\p{L}\\p{Digit}]*)";
                  s += "$1";
              } else {
                  p += "()";
              }
              s += " ";
              p += " ";
              if (curse.endsWith("*")) {
                  curse = curse.substring(0, curse.length() - 1);
                  p += "([\\p{L}\\p{Digit}]*)";
                  s += "$3";
              }
  
              String pattern = "\\b" + p.replace(" ", "(" + curse + ")") + "\\b";
              Pattern pat = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
              _matchers[ii] = pat.matcher("");
              _replacements[ii] = s;
              _vernacular[ii] = st2.nextToken().replace('_', ' ');
              _comicLength[ii] = curse.codePointCount(0, curse.length());
          }
      }
docs: Configure the curse word portion of our filtering.