如何在连续两次或多次排除子串的情况下替换仅出现一次的子串?

时间:2015-12-23 16:26:32

标签: java string replace

我有什么方法可以在java中执行以下操作吗?

String s = "acdaaefacaa";
String b = s.replaceLikeMethod("a", "");

和b成为" cdaaefcaa"。基本上将第一个字符串"a"的任何匹配项替换为另一个"",除非"a"连续出现两次或更多次。

2 个答案:

答案 0 :(得分:3)

您可以使用正则表达式来实现此目的。你想要的功能是

  1. 否定LookBehind (?<!foo)匹配模式,除非foo发生在此之前。
  2. 负面的预测。 (?!foo)匹配模式,除非事后发生foo
  3. 你基本上需要同时使用两个与字符串相同的字符串来匹配和模式。 E.g。

    String pattern = "(?<!foo)foo(?!foo)";
    

    或者使用"a"

    等运行时已知的字符串轻松替换
    String pattern = "(?<!foo)foo(?!foo)".replace("foo", "a");
    

    最后,要替换只做:

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

答案 1 :(得分:1)

使用此正则表达式:((?<!a)a(?!a))。它使用负前瞻和后视。它匹配前面和后面跟着另一个a的每个a

测试:

String input = "acdaaefacaa";
String output = input.replaceAll("((?<!a)a(?!a))", "");
System.out.println(output);

输出:

  

cdaaefcaa