-1

リスト(ファイルではなく)を検索する方法があり、見つかった場合はそれを置き換える方法があるかどうか(例を挙げて!)知りたいです。

背景: サーバーを作成していますが、悪口を検閲したいのですが、私が持っているシステムは機能していますが、十分に効率的ではありません。

現在のコード:

     String impmessage = message.replaceAll("swearword1", "f***");
     String impmessage2 = impmessage.replaceAll("swearword2", "bi***");
     String impmessage3 = impmessage2.replaceAll("swearword3", "b***");
     String impmessage4 = impmessage3.replaceAll("swearword4", "w***");
     ...
     String impmessage8 = impmessage7.replace('%', '&');

シャバン全体。しかし、フィルターに新しい単語を追加したい場合は、そこに別の単語を追加する必要があります。

4

1 に答える 1

2

あなたの基本的な解決策は以下の通りです:

Map<String, String> mapping = new HashMap();
mapping.put("frak","f***");

String censoredMsg = message;
for (String word : mapping.KeySet()) {
  censoredMsg = censoredMsg.replaceAll(word, mapping.get(word));
}

マッピングをどのように作成するかは、ユーザー次第です。ランダムなファイルからのプルを含む、別のより包括的なソリューションを次に示します。

public class TheMan {
  private Set<String> uglyWords;

  public TheMan() {
    getBlacklist();
  }

  private void getBlacklist() {
    Scanner scanner = new Scanner(new File("wordsidontlike.txt"));
    while (scanner.hasNext()) {
      String word = scanner.nextLine();
      uglyWords.add(word);
    }
  }

  public String censorMessage(String message) {
    String censoredMsg = message;
    for (String word : uglyWords) {
      String replacement = word.charAt(0);
      StringUtils.rightPad(replacement, word.length(), '*');
      censoredMsg = censoredMsg.replaceAll(word, replacement);
    }
    return censoredMsg;
  }
}
于 2012-08-07T17:58:46.940 に答える