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