我需要一种方法来替换句子中的单词,例如“嗨,某事”。我需要将其替换为"hello, something"
.
str.replaceAll("hi", "hello")
给我"hello, somethellong"
。
我也尝试过str.replaceAll(".*\\W.*" + "hi" + ".*\\W.*", "hello")
,我在这里看到了另一个解决方案,但是这似乎也不起作用。
实现这一目标的最佳方法是什么,所以我只替换没有被其他字母数字字符包围的单词?
在这种情况下,单词边界应该可以很好地为您服务(IMO 是更好的解决方案)。更通用的方法是使用负前瞻和后瞻:
String input = "ab, abc, cab";
String output = input.replaceAll("(?<!\\w)ab(?!\\w)", "xx");
System.out.println(output); //xx, abc, cab
这将搜索出现在其他单词字符之前或之后的“ab”。您可以将“\w”换成任何正则表达式(好吧,由于正则表达式引擎不允许无界环顾,因此存在实际限制)。
用于\\b
单词边界:
String regex = "\\bhi\\b";
例如,
String text = "hi, something";
String regex = "\\bhi\\b";
String newString = text.replaceAll(regex, "hello");
System.out.println(newString);
如果你打算做任何数量的正则表达式,让这个正则表达式教程成为你最好的朋友。我不能太推荐它!