给定一个字符串'a' - 检查'a'中字符串'b'的出现并用String'c'替换这些出现

时间:2013-12-17 20:18:14

标签: java regex string split

我有工作代码,检查'a'中字符串'b'的模式,并用String'c'替换它们。它利用String.split()并多次扫描字符串'a',找到索引来进行替换,并使用StringBuilder来避免多余的String'a'复制。所以它以线性时间O(n)运行。

现在,问题是如果模式匹配重叠,我仍然会得到肯定的匹配。例如,在String a ='ababa'的情况下 - >我得到两个匹配的字符串b ='aba'。如何通过仅替换第一个完整事件并且不将剩余字符'ba'识别为匹配来解决此问题。如果String c ='c',我希望得到a ='cba'的结果。

这是我的代码。

public static String replaceSubstringWithPattern () {
    String a = "abab";
    String b = "aba";
    String c = "c";

    //Special Cases --> if a or b are empty no need to substitute
    if (a.isEmpty() || b.isEmpty()) return a;

    StringBuilder aTemp = new StringBuilder();
    String[] aArray = a.split(b);  // <-- 
    System.out.println("aArray = " + aArray.length);

    //Special Cases --> no splits because string a is exclusive repetition of string b
    if (aArray.length == 0) {
        for (int x = 0; x < a.length()/b.length(); x++) {
            aTemp.append(c);
        }
        return aTemp.toString();
    }

    aTemp.append(aArray[0]);    //firstElement

    for (int i=1; i<aArray.length; i++) {
        aTemp.append(c);
        aTemp.append(aArray[i]);
    }

    return aTemp.toString();
}

1 个答案:

答案 0 :(得分:3)

你可以试试这个:

String a="ababa";
String b="aba";
String c="c";

System.out.println("result= " + a.replaceFirst(b,c));

<强>输出

result= cba