Regex Java replace all方法追加替换字符串,而不是替换

Regex Java replace all方法追加替换字符串,而不是替换,regex,string,Regex,String,我正在尝试替换文本文件中以元音开头的所有单词。我正在使用RegEx执行此操作,但当我尝试用replaceAll方法替换它时,替换字符串将被追加而不是替换 这是我的文本文件、代码和输出 你好,我是约翰 你好吗 我很好 谢谢897670 $%^ 代码: data是包含我的所有文件数据的字符串 输出: Hello 12 XXXXXI XXXXXam Manoj How XXXXXare you XXXXXI XXXXXam good Thank you 89767 0 #$%^ 请帮我解决这个问题。

我正在尝试替换文本文件中以元音开头的所有单词。我正在使用
RegEx
执行此操作,但当我尝试用replaceAll方法替换它时,替换字符串将被追加而不是替换

这是我的文本文件、代码和输出

你好,我是约翰 你好吗 我很好 谢谢897670

$%^ 代码:

data是包含我的所有文件数据的字符串

输出:

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

请帮我解决这个问题。关于replaceAll()方法,我已经找到了一些答案,但我找不到问题的答案。

您的模式只包含零宽度断言:
\\b
匹配单词边界位置,
(?=[AEIOUaeiou])
正向前瞻断言元音之前的位置

使图案更具消费性。使用

要仅匹配字母,请将
\w
替换为
\p{Alpha}

见和a:

输出:

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

使用
data.replaceAll(\\b[AEIOUaeiou]\\w*,“XXXXX”)
或仅匹配字母,将
\w
替换为
\p{Alpha}
。我尝试过使用\p{Alpha},但无法获得预期的结果输入文件:您好12我是John您好我很好您%e谢谢89767 0$%^String dest=so.replaceAll(\\b[AEIOUaeiou]\\p{Alpha}*,“XXXXX”);系统输出打印项次(目的地);输出:你好12 XXXXX XXXXX约翰你好XXXXX你XXXXX XXXXX好XXXXX%XXXXX谢谢89767 0#$%^。是的,会的。注意:您可以在末尾添加
\\b
“\\b[AEIOUaeiou]\\p{Alpha}*\\b”
)使其仅匹配整句话。@MANOJREDDY:您能解释一下您对上面提供的字符串的期望吗?然后将
\w
替换为
\S
data = data.replaceAll("\\b[AEIOUaeiou]\\w*","XXXXX");
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
#$%^