2011-08-26 89 views
9

難以用轉義報價替換報價。我有一個字符串,其值爲'Foo「欄」foobar「,我試圖用轉義引號替換引號,並且它不起作用。我快瘋了。Java String.replaceAll不會替換帶有轉義報價的報價

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

我希望s的值爲'foo \「bar \」foobar',但它沒有。任何幫助?

回答

19

replaceAll使用正則表達式 - 即使在替換中,反斜槓也只是轉義下一個字符。

使用replace而不是和它的罰款...或者,如果你想使用正則表達式的形式,你可以雙擊第二個參數中的反斜槓:

String after = before.replaceAll("\"", "\\\\\""); 

,如果你需要匹配這可能是有用的使用正則表達式輸入,但我強烈建議使用非正則表達式,除非你真的需要正則表達式的行爲。

我個人認爲這是在爲String方法是錯誤的使用正則表達式開始 - 比如foo.split(".")這將各執每個字符而不是時間,完全出乎意料的粗心的開發者。

+3

+1,爲'分裂( 「」)'。我討厭這個...... –

9

使用s = s.replace("\"", "\\\"");,這是非正則表達式版本。

1
s=s.replaceAll("\"","\\\\\""); 

但是,你應該真的與replace(...)一起去看看其他人的建議。

1

使用;

s=s.replaceAll("\"","\\\\\""); 
0

請按照以下程序使用> s.replace(「/"."//」);

public class stringbackslash { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String s="\"; 
     s=s.replace("\", "\\"); 
     System.out.println(s); 

    } 

} 
2

你需要逃避都替換所有參數,因爲它們是正則表達式!

@Test 
public void testReplace() { 
    assertEquals("foo\\\"bar\\\"", 
       "foo\"bar\"".replaceAll("\\\"", "\\\\\\\"")); 
} 

所以,如果你想要寫"你需要躲避正則表達式 - >\"而是因爲你在Java中,你需要逃避的java到\",讓您得到\\\\"。 (這是搜索參數)。

對於你想擁有\"替換參數 - >在正則表達式:\\\" - > Java中\\\\\\\"

+0

正是我以爲上面缺少的解釋!謝謝 – Engineiro

1
String str = "'Foo \"Bar\" Bar'"; 
System.out.println(str);   
System.out.println(str.replaceAll("\"", "\\\\\""));