1

文字列をフィルタリングしたい。

基本的に、誰かがメッセージを入力するときに、次のように特定の単語を除外したいと考えています。

ユーザーの種類: hey guys lol omg -omg mkdj*Omg*ndid

フィルターを実行して、次のことを行います。

出力: hey guys lol - mkdjndid

そして、フィルターで除外する単語をArrayListいくつか含む から、フィルター処理された単語をロードする必要があります。現在、私はやっていますif(message.contains(omg))が、誰かがzomg-omgなどと入力するとうまくいきません。

4

4 に答える 4

1

悪い単語から構築された正規表現で replaceAll を使用します。

message = message.replaceAll("(?i)\\b[^\\w -]*" + badWord + "[^\\w -]*\\b", "");

これはあなたのテストケースに合格します:

public static void main( String[] args ) {
    List<String> badWords = Arrays.asList( "omg", "black", "white" );
    String message = "hey guys lol omg -omg mkdj*Omg*ndid";
    for ( String badWord : badWords ) {
        message = message.replaceAll("(?i)\\b[^\\w -]*" + badWord + "[^\\w -]*\\b", "");
    }
    System.out.println( message );
}
于 2012-06-18T02:44:39.567 に答える
0

試す:

input.replaceAll("(\\*?)[oO][mM][gG](\\*?)", "").split(" ")
于 2012-06-18T02:15:19.070 に答える
0

デイブはすでに答えを出していますが、ここで強調しておきます。フィルター処理された単語の出現を置き換えるだけの単純な for ループを使用してアルゴリズムを実装すると、問題に直面します。たとえば、'classic' という単語の ass という単語をフィルター処理して 'butt' に置き換えると、結果の単語は 'clbuttic' になり、意味がありません。したがって、Linux の /usr/share/dict/ ディレクトリに保存されているような単語リストを使用して、単語が有効かどうか、またはフィルタリングが必要かどうかを確認することをお勧めします。あなたが何をしようとしているのかよくわかりません。

于 2012-06-18T13:27:59.163 に答える