2013-02-14 192 views
4

我還有很長的Java String,它包含了許多逃脫雙引號的:的Java刪除逃脫雙引號

// Prints: \"Hello my name is Sam.\" \"And I am a good boy.\" 
System.out.println(bigString); 

我想刪除所有的轉義雙引號(\"),並與普通雙層替換它們-quotes("),使我得到:

// Prints: "Hello my name is Sam." "And I am a good boy." 
System.out.println(bigString); 

我認爲這是一個沒有腦子。我最好的嘗試:

bigString = bigString.replaceAll("\\", ""); 

拋出以下異常:

意外指數近1

任何想法內部錯誤?提前致謝。

+0

你究竟是如何得到這樣一串? – EJP 2013-02-15 02:58:38

回答

11

每個人都告訴你使用replaceAll,更好的答案是真的用replace

replaceAll - 需要正則表達式

replace [javadoc] - 只是一個字符串搜索和替換

所以這樣的:

bigString = bigString.replace("\\\"", "\"");

注意,這也比較快,因爲正則表達式不需要。

+0

每個人都在想「哦,我知道如何解決這個問題」,然後忘了看到替代方案:) +1使用更好的版本。 – 2013-02-14 21:13:31

+0

+1,即使在我不需要正則表達式的情況下,我也永遠不會使用replace()。:( – PermGenError 2013-02-14 21:13:51

+1

每個人都專注於糾正正則表達式,其中更簡單的就是不使用它。+1在盒子外面思考:) – Pshemo 2013-02-14 21:13:53

4

全部替換使用正則表達式,所以加\\

bigString = bigString.replaceAll("\\\\\"", "\""); 

解釋爲何另一組: 「\」 是由Java的interpretad作爲一個正常的\。但是,如果僅在參數中使用該參數,則它將成爲正則表達式\。正則表達式中的\可以轉義下一個字符。由於沒有找到,它會引發異常。

當您使用Java "\\\\\""編寫代碼時,它首先被java作爲正則表達式\\"處理。然後將正則表達式實現視爲「反斜槓後跟雙引號」。

+3

這將刪除所有反斜槓,而不僅僅是引用之前的那些反斜槓。 – 2013-02-14 21:05:22

+0

對不起,編輯了這篇文章。 – 2013-02-14 21:07:42

1
String str="\"Hello my name is Sam.\" \"And I am a good boy.\""; 
    System.out.println(str.replaceAll("\\\"", "\"")); 

輸出:

"Hello my name is Sam." "And I am a good boy." 
0

的第一個參數的replaceAll是正則表達式。你傳遞\這不是一個有效的正則表達式。嘗試:

bigString.replaceAll("\\\\", "");