2014-02-28 142 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);因爲我也忽略了區分大小寫。 –