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 回答