2010-07-28 63 views
1

當使用String類的replaceAll方法時,我收到了一些奇怪的結果。用於Java的escapeA'方法replaceAll方法

字符串查詢包含以下內容:@cm:name:"hello"

如果我說query.replaceAll(":", "\\:");

我希望以下結果:@cm\:name\:"hello"

相反,我得到:@cm:name:"hello"。原始內容。

回答

1

請勿將replaceAll(..)用於非正則表達式替換。改爲使用replace(..)

然後,一定要有:

query = query.replace(":", "\\:"); 

因爲String是不可變的 - 即如果你只是調用該方法不分配結果,你什麼也得不到 - 對象的內部狀態不會改變。

+0

我簡化了這個,我正在使用正則表達式。 – blackberryfan234 2010-07-28 17:12:02

+1

好吧,你在簡化中做得太過分了,產生了一個沒有解釋你的問題的非編譯代碼。請更新相關問題的相關細節 - 即實際的代碼。 – Bozho 2010-07-28 17:13:56

+0

對不起,我沒有意識到我需要在這個編輯器中逃避它。 – blackberryfan234 2010-07-28 17:22:02

0

\的轉義序列是\\。所以,你會這樣寫:

query.replaceAll(":", "\\:"); 
0

逃生斜線

query.replaceAll(":","\\:");

1

有兩個簡單的規則。

  1. Java編譯器需要兩個黑色斜線來表示字符串文字中的單個反斜槓。

  2. 正則表達式需要兩個反斜槓來表示正則表達式中的單個反斜槓。

所以,如果你想要一個字符串文字包含一個正則表達式單反斜線,你必須編寫。