2013-11-27 101 views
0

同一主題:replace String with another in java更換陣列字符串與其他數組字符串

我想更換String Replace = "SUM(NewCounter)+SUM(NewCounter2)+NewCounter3";

Array A = {NewCounter, NewCounter2, NewCounter3}
說我有Array B = {test, testA, testB}

我想與陣列A用數組來代替它B in String Replace
我嘗試使用方法ReplaceAll(A.get(index), B.get(index));

問題是:

NewCounter2由系統讀"NewCounter"+2
所以我有結果= String Replace = "SUM(test)+SUM(test2)+test3";

我嘗試在字符NewCounter使用' ,它將是Array A = {'NewCounter', 'NewCounter2', 'NewCounter3'}

但我必須改變字符串Replace像在此之前:

String Replace = "SUM('NewCounter')+SUM('NewCounter2')+'NewCounter3'"; 

有沒有其他辦法我嗎? 我不想前改變串...

Thanksfull,

-mazipan-

+4

讓我們看看你已經嘗試了什麼。 –

+5

很難弄清楚你的問題意味着什麼。 –

+0

重複[一次替換文件中的多個子串](https://stackoverflow.com/questions/7661460/replace-multiple-substrings-in-a-file-at-once)。 – Boann

回答

2

的同時更換最簡單的辦法是處理字符串長度遞減順序。這將正確地進行替換:

A = {NewCounter3, NewCounter2, NewCounter} 
B = {testB, testA, test} 

但是,如果任何搜索字符串可以匹配替換字符串,此技術將不起作用。

編輯:對於一般情況下,我已經寫了這一點:

public static String simultaneousReplace(String subject, 
     String[] find, String[] replace) { 
    if (find.length != replace.length) throw new IllegalArgumentException(
     "Strings to find and replace are not paired."); 
    int numPairs = find.length; 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0, len = subject.length(); i < len; i++) { 
     int longestMatchIndex = -1; 
     int longestMatchLength = -1; 
     for (int j = 0; j < numPairs; j++) { 
      String find1 = find[j]; 
      if (subject.regionMatches(false, i, find1, 0, find1.length())) { 
       if (find1.length() > longestMatchLength) { 
        longestMatchIndex = j; 
        longestMatchLength = find1.length(); 
       } 
      } 
     } 
     if (longestMatchIndex >= 0) { 
      sb.append(replace[longestMatchIndex]); 
      i += longestMatchLength - 1; 
     } else { 
      sb.append(subject.charAt(i)); 
     } 
    } 
    return sb.toString(); 
} 

用法示例:

String s = "SUM(NewCounter)+SUM(NewCounter2)+NewCounter3"; 

s = simultaneousReplace(s, 
    new String[] { "NewCounter", "NewCounter2", "NewCounter3" }, 
    new String[] { "test", "testA", "testB" } 
); 

System.out.println(s); 

輸出:

SUM(test)+SUM(testA)+testB 
+0

謝謝,這是我想要的。 但這是很久以前的問題。 我甚至忘記了這個問題。 謝謝@Boann – mazipan

0

如果SUM就是一個String和不是一種方法,那麼你可以使用:

String Replace = "SUM(" + NewCounter + ")SUM(" + NewCounter2 +")" + NewCounter3; 

如果總和是一個方法,那麼你可以通過它周圍使用

String Replace = SUM(NewCounter) + SUM(NewCounter2) + NewCounter3; 

雖然第二個你可能要投/轉換爲字符串

().toString() 

,或者是附加

(String)() 
0

Apache's commons-lang StringUtils#replaceEach優雅地處理這些問題。

運行的代碼:

public static void main(String [] args) { 
    String replace = "SUM(NewCounter)+SUM(NewCounter2)+NewCounter3"; 
    String [] a = { "NewCounter", "NewCounter2", "NewCounter3" }; 
    String [] b = { "test", "testA", "testB" }; 

    System.out.println(StringUtils.replaceEach(replace, a, b)); 
} 

會給你

SUM(test)+SUM(test2)+test3

+0

「SUM(test)+ SUM(test2)+ test3」完全不是OP想要的。 – Boann

+0

我認爲這是OP想要的。 – Bnrdo

+0

他想要「SUM(test)+ SUM(testA)+ testB」。 – Boann

相關問題