2013-12-17 77 views
0

替換那些出現我在工作的代碼,不會在檢查字符串「B」的模式「A」並用String'c'代替。它利用String.split()並通過字符串'a'多次掃描,找到索引來進行替換,並使用StringBuilder來避免對字符串'a'的冗餘複製。所以它以線性時間O(n)運行。現在給定一個字符串「A」 - 檢查字符串中的「A」「B」的出現,並與字符串「C」

,問題是,如果有重疊的模式相匹配,我仍然得到了積極的比賽。例如,在字符串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

難道你們就不能只是做'a.replaceFirst(B,C);'? – MikeFHay

+1

'result = a.replace(b,c);'? – assylias

+0

如果這是一項家庭作業,請注意它,以便我們可以給予更好的指導而不給予直接的答案,否則給出的答案是完美的。 –

回答

3

你可以試試這個:

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

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

輸出

result= cba 
相關問題