我有工作代码,检查'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();
}
答案 0 :(得分:3)
你可以试试这个:
String a="ababa";
String b="aba";
String c="c";
System.out.println("result= " + a.replaceFirst(b,c));
<强>输出强>
result= cba