2017-04-23 176 views
2

我試圖在我的文本文件中將所有以元音開頭的單詞替換爲"XXXXX"。我正在使用RegEx來執行此操作,但是當我嘗試用replaceAll方法替換它時,替換字符串被替換而不是替換。Java替換所有添加替換字符串的方法,而不是替換

這是我的文本文件,代碼和輸出。

你好12我是約翰 你怎麼 我好 謝謝89767 0

$%^

代碼:

String dest = data.replaceAll("\\b(?=[AEIOUaeiou])","XXXXX"); 
System.out.println(dest); 

數據是包含字符串的所有我的文件數據。

輸出:

Hello 12 XXXXXI XXXXXam Manoj 
How XXXXXare you 
XXXXXI XXXXXam good 
Thank you 89767 0 
#$%^ 

請幫我解決這個問題。我已經通過了關於replaceAll()方法的一些答案,但我無法找到我的問題的答案。

+0

使用'data.replaceAll( 「\\ B [AEIOUaeiou] \\ W *」, 「XXXXX」);'或只匹配字母,用'\ p {Alpha}'替換'\ w'。 –

回答

2

你的圖案僅包含零寬度斷言\\b匹配的字邊界的位置和(?=[AEIOUaeiou])正先行斷言元音之前的位置。

使圖案消耗。使用

data = data.replaceAll("\\b[AEIOUaeiou]\\w*","XXXXX"); 

要只匹配字母,用\p{Alpha}更換\w

參見regex demoJava demo

String data = "Hello 12 I am John\nHow are you\nI am good\nThank you 89767 0\n#$%^"; 
data = data.replaceAll("\\b[AEIOUaeiou]\\p{Alpha}*","XXXXX"); 
System.out.println(data); 

輸出:

Hello 12 XXXXX XXXXX John 
How XXXXX you 
XXXXX XXXXX good 
Thank you 89767 0 
#$%^ 
+0

我曾嘗試與\ p {阿爾法}但不能獲得期望的結果 輸入文件:你好12我是約翰 你怎麼 我好OU%E 謝謝89767 0 #$%^字符串DEST = so.replaceAll( 「\\ b [AEIOUaeiou] \\ p {阿爾法} *」, 「XXXXX」); \t \t System.out.println(dest);輸出:你好12 XXXXX XXXXX約翰 如何XXXXX你 XXXXX XXXXX好XXXXX%XXXXX 謝謝89767 0 #$%^。 –

+0

是的,它會[看起來像這樣](http://ideone.com/WUc4ac)。注意你可以在末尾追加'\\ b'('\\ b [AEIOUaeiou] \\ p {Alpha} * \\ b「​​'),使它只匹配整個單詞。 –

+0

@MANOJREDDY:你能解釋一下你對上面提供的字符串的期望嗎? [也許預期的結果就像這裏](https://regex101.com/r/UKaxPk/2)?然後用'\ S'替換'\ w'。 –