2017-04-23 114 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'。 –