2012-02-09 50 views
0

我有以下代碼:字符串的替換所有正在取代無

System.out.println("Trace: #" +"2"); 
System.out.println(rv); 
     rv.replaceAll("$t",sTAB); 
System.out.println("Trace: #" +"3"); 
System.out.println(rv); 

房車和刺是String類型。並且sTAB具有製表符的值。輸出如下:

Trace: #2 
is$thi$t 
Trace: #3 
is$thi$t 

但我相信:

Trace: #2 
is$thi$t 
Trace: #3 
is{tab}hi{tab}  

當然與{標籤}是實際的製表符。你能解釋我的代碼有什麼問題嗎?

回答

6

replaceAll()需要正則表達式返回替換String

$是一個正則表達式meta character,它匹配一行的結尾。

嘗試使用:

rv = rv.replaceAll("\\$t", sTAB); 
+0

rv.replaceAll(「\ $ t」,sTAB);編譯時出現「非法轉義字符」錯誤。 rv.replaceAll( 「\\ $ T」,刺);編譯,但結果與以前一樣。 – Kevin 2012-02-09 19:25:48

+1

@Kevin您是否已將'replaceAll()'的返回值重新分配給'rv'?我只是測試了這一點,它工作正常。 – 2012-02-09 19:28:59

+0

@Kevin:告訴我們'sTAB'的價值。 – RanRag 2012-02-09 19:29:32

0

沒有?

rv = rv.replaceAll("$t",sTAB); 
0

您需要重新分配字符串rv = rv.replaceAll("$t",sTAB);

2

的Java String s爲不可變的。一旦你有一個String它不會改變。 replaceAll實際上會返回一個新的替換字符串。

你應該做

rv = rv.replaceAll("$t",sTAB); 

還要注意的是replaceAll需要一個正則表達式。你應該逃過$

rv = rv.replaceAll("\\$t", sTAB);