2012-08-29 64 views
0

我有一個包含字符串對的二維數組。如果找到一個字符串,它應該用它的對替換它。java字符串全部替換

代碼:

for (int i = 0; i < pairs.length; i++) { 
     if (name.contains(pairs[i][0])) { 
      name.replaceAll(pairs[i][0], abbr[i][1]); 
     } 
    } 

它不是替換字符串。什麼是錯誤?

+0

一些示例輸入和預期輸出可能有所幫助。除了「審查」,還有replace()(或)replaceAll()的情況嗎?最後但並非最不重要的一點,字符串是不可改變的。 – kosa

+0

用'pairs [i] [1]'替換'abbr [i] [1]'...另外,使用'Map '代替雙目數組... – XenoRo

+0

我真的沒有這個問題......你可以在運行你的代碼之前發佈數組的內容,以及在你運行代碼之後數組的所需內容? – 11684

回答

4

您忽略分配replaceAll的結果,所以修改已丟失。

也許你想保留修改字符串name

for (int i = 0; i < pairs.length; i++) { 
    if (name.contains(pairs[i][0])) { 
     name = name.replaceAll(pairs[i][0], abbr[i][1]); 
    } 
} 

需要注意的是java的String對象是不可改變的,因此調用name.replaceAll修改name,它返回一個String與修改。

+0

謝謝!我一直在盯着它太久 – trs

+0

@trs不要忘記選擇標記你選擇的答案! 「o_0 – XenoRo

2

字符串是不可變的。

name.replaceAll(pairs[i][0], abbr[i][1]); 

創建一個新的String(不修改「名稱」字符串)

嘗試

name = name.replaceAll(pairs[i][0], abbr[i][1]); 
0

正在創建的字符串的修改版本,但它的返回值正在失去。

name = name.replaceAll(pairs [i] [0],abbr [i] [1]);

應該工作。

+0

我不認爲字符串正在被修改,一個新的字符串被修改並被傳回。 – RNJ

+0

謝謝,我沒有意識到我是這樣寫的!編輯我的答案。 – SamuelDavis