1

たとえば、「こんにちは、何か」のように、文中の単語を置き換える方法が必要です。に置き換える必要があり"hello, something"ます。 str.replaceAll("hi", "hello")私に与えます"hello, somethellong"

私も試しましstr.replaceAll(".*\\W.*" + "hi" + ".*\\W.*", "hello")たが、ここで別の解決策を見ましたが、それもうまくいかないようです。

これを実現するための最良の方法は何ですか?他の英数字で囲まれていない単語のみを置き換えますか?

4

2 に答える 2

4

この場合、単語の境界がうまく機能するはずです(そして、IMOがより良い解決策です)。より一般的な方法は、負の先読みと後読みを使用することです。

 String input = "ab, abc, cab";
 String output = input.replaceAll("(?<!\\w)ab(?!\\w)", "xx");
 System.out.println(output); //xx, abc, cab

これは、別の単語文字の前後にない出現箇所「ab」を検索します。「\w」を任意の正規表現と交換できます(正規表現エンジンでは無制限のルックアラウンドが許可されていないため、実際的な制限があります)。

于 2012-04-28T16:30:55.107 に答える
2

\\b単語の境界に使用:

String regex = "\\bhi\\b";

例えば、

  String text = "hi, something";
  String regex = "\\bhi\\b";
  String newString = text.replaceAll(regex, "hello");

  System.out.println(newString);

正規表現をいくらでも実行する場合は、この正規表現チュートリアルを新しい親友にしてください。あまりお勧めできません!

于 2012-04-28T16:28:28.470 に答える