2014-02-28 99 views
1

我正在使用java replaceAll()方法替换字符串中的匹配单词。在我的情况下,如果这个单词在逗号(,)fullstop(。)或其他任何类似的字词旁边,那么这个单词不会被替换。替换java中的所有单词

示例: 和。和 和; 和(

这是代码:

body = body.replaceAll("(?i) "+knownWord + " ", replaceWord); 

任何人都可以请建议我的正则表达式,它能够识别该字符串的所有单词的

+1

HTTP:// WWW。 regular-expressions.info/wordboundaries.html – Joel

回答

1

如果你想匹配特定? knownWord做:

body = body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord); 

我想你要找的是\\b(单词边界)它用于检测单词开始/结束的位置,因此逗号或点应该不再是问题。

更多响应您的评论详细的例子

String body = "I'm going to school. "; 
String knownWord = "school"; 
String replaceWord = "shop"; 
System.out.println(body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord)); 

上面会打印出以下几点:

我要去逛街。

+0

@Asanka为你做了这项工作? – donfuxx

+0

感谢您提供此解决方案我现在正在尝试这个方案,我会尽快与您取得成果。 –

+0

@Asanka当然;-)让我知道它是否在最后或如果你需要更多的帮助。 – donfuxx

2

这并不为你指定:

(?<![.,])\b(\w+)\b(?![.,]) 

Regular expression visualization

Debuggex Demo

它发现(并获取)的话,只要他们不相邻的逗号或句号。只需在字符类中添加你喜欢的任何标点符号,如[.,?(]

这里是正则表达式逃过Java字符串:"(?<![.,])\\b(\\w+)\\b(?![.,])"

至于忽略的情况下,只要传递CASE_INSENSITIVE标志的图形对象,如具有

Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE); 
+0

+ 1用于说明性的解释,但是我认为@Asanka实际上也想要替换它们,如果它们在旁边'',' – donfuxx

+0

是的。我认为他的意思是相反的:他不能*弄清楚如何*在标点符号旁边捕捉单词:) – aliteralmind

+0

@aliteralmind您能否用您编写的正则表达式替换此代码。 body = body.replaceAll(“(?i)”+ knownWord +“”,replaceWord);因为我也忽略了区分大小写。 –