code: public String transform() {
          StringBuilder sb = new StringBuilder();
          for (int i = 0; i < input.length(); i++) {
              if (ignoreCharactersContaining != null
                              && ignoreCharactersContaining.contains(String.valueOf(input.charAt(i))))
                  sb.append(input.charAt(i));
              else if (Character.isDigit(input.charAt(i)))
                  sb.append("d");
              else if (Character.isUpperCase(input.charAt(i)) && !preserveCase)
                  sb.append(Character.toLowerCase(input.charAt(i)));
              else
                  sb.append(input.charAt(i));
  
          }
  
          String normalized = Normalizer.normalize(sb.toString(), Form.NFD);
          normalized = normalized.replace(".", "");
          normalized = normalized.replace(",", "");
          normalized = normalized.replaceAll("\"", "");
          normalized = normalized.replace("'", "");
          normalized = normalized.replace("(", "");
          normalized = normalized.replace(")", "");
          normalized = normalized.replace("“", "");
          normalized = normalized.replace("”", "");
          normalized = normalized.replace("…", "");
          normalized = normalized.replace("|", "");
          normalized = normalized.replace("/", "");
          normalized = normalized.replace("\\", "");
          normalized = normalized.replace("[", "");
          normalized = normalized.replace("]", "");
          normalized = normalized.replace("‘", "");
          normalized = normalized.replace("’", "");
          normalized = normalized.replaceAll("[!]+", "!");
          return normalized;
      }
docs: Returns the normalized text passed in via constructor
  @return the normalized text passed in via constructor