當使用String類的replaceAll方法時,我收到了一些奇怪的結果。用於Java的escapeA'方法replaceAll方法
字符串查詢包含以下內容:@cm:name:"hello"
如果我說query.replaceAll(":", "\\:");
我希望以下結果:@cm\:name\:"hello"
相反,我得到:@cm:name:"hello"
。原始內容。
當使用String類的replaceAll方法時,我收到了一些奇怪的結果。用於Java的escapeA'方法replaceAll方法
字符串查詢包含以下內容:@cm:name:"hello"
如果我說query.replaceAll(":", "\\:");
我希望以下結果:@cm\:name\:"hello"
相反,我得到:@cm:name:"hello"
。原始內容。
請勿將replaceAll(..)
用於非正則表達式替換。改爲使用replace(..)
。
然後,一定要有:
query = query.replace(":", "\\:");
因爲String
是不可變的 - 即如果你只是調用該方法不分配結果,你什麼也得不到 - 對象的內部狀態不會改變。
\
的轉義序列是\\
。所以,你會這樣寫:
query.replaceAll(":", "\\:");
逃生斜線
query.replaceAll(":","\\:");
有兩個簡單的規則。
Java編譯器需要兩個黑色斜線來表示字符串文字中的單個反斜槓。
正則表達式需要兩個反斜槓來表示正則表達式中的單個反斜槓。
所以,如果你想要一個字符串文字包含一個正則表達式單反斜線,你必須編寫。
我簡化了這個,我正在使用正則表達式。 – blackberryfan234 2010-07-28 17:12:02
好吧,你在簡化中做得太過分了,產生了一個沒有解釋你的問題的非編譯代碼。請更新相關問題的相關細節 - 即實際的代碼。 – Bozho 2010-07-28 17:13:56
對不起,我沒有意識到我需要在這個編輯器中逃避它。 – blackberryfan234 2010-07-28 17:22:02