Java 如何替换仅出现一次的子字符串,同时在一行中排除两次或多次子字符串?

Java 如何替换仅出现一次的子字符串,同时在一行中排除两次或多次子字符串?,java,string,replace,Java,String,Replace,有没有什么方法可以在java中执行以下操作 String s = "acdaaefacaa"; String b = s.replaceLikeMethod("a", ""); b变成cdaaefcaa。基本上用另一个字符串替换出现的第一个字符串a,除非a在一行中出现两次或更多次。使用此正则表达式:?。它使用负向前看和向后看。它匹配每一个没有前面和后面跟着另一个a的a 测试: 产出: cdaaefcaa 您可以使用正则表达式来实现这一点。您想要的功能是 消极落后?匹配模式,除非之前发生foo。

有没有什么方法可以在java中执行以下操作

String s = "acdaaefacaa";
String b = s.replaceLikeMethod("a", "");
b变成cdaaefcaa。基本上用另一个字符串替换出现的第一个字符串a,除非a在一行中出现两次或更多次。

使用此正则表达式:?。它使用负向前看和向后看。它匹配每一个没有前面和后面跟着另一个a的a

测试:

产出:

cdaaefcaa


您可以使用正则表达式来实现这一点。您想要的功能是

消极落后?匹配模式,除非之前发生foo。 消极前瞻?!foo匹配模式,除非foo紧接着出现 基本上,您需要同时使用这两个字符串作为匹配和模式的字符串。例如

String pattern = "(?<!foo)foo(?!foo)";
最后,要替换,请执行以下操作:

String b = s.replaceAll(pattern, "");

我怀疑您需要使用正则表达式,但我在这方面的经验不足,无法给出充分的答案。只是修改了案例以清除任何歧义,我想替换只发生一次的,如果有两个或更多连续的aa,请忽略它。@javarookie试图让问题更清楚。如果您不同意,请随时回退。replaceAll?@zapl和我在写答案时根本没有注意这些评论。如果zapl发布了他自己的答案,我会删除我的答案。好奇的是,你为什么把整个模式放在括号里?这有什么影响?@ManosNikolaidis效果是什么,根本什么都没有。
String pattern = "(?<!foo)foo(?!foo)".replace("foo", "a");
String b = s.replaceAll(pattern, "");