2017-09-19 261 views
-1

更換所以,當我運行以下,用反斜槓

String thing = "y$xx$sss$$aaa";       
thing = thing.replaceAll("$", "\\$");       
System.out.println(thing); 

我仍然得到"y$xx$sss$$aaa"作爲輸出。我也試着

String thing = "y$xx$sss$$aaa";       
thing = thing.replaceAll("$", "\\\\$");       
System.out.println(thing); 

String thing = "y$xx$sss$$aaa";       
thing = thing.replaceAll("$", "\\\\\\\\$");       
System.out.println(thing); 

每現有的一些答案,但我只是不斷地得到錯誤Illegal group reference: group index is missing

基本上,我試圖用一個轉義美元符號\$

+1

@wiktorstribizew他不是隻是做了什麼鏈接重複的答案是說?顯然它不工作。 – Gendarme

+0

或['.replaceAll(「\\ $」,「\\\\\ $」)](https://ideone.com/HXK6UO)。 –

+0

@憲兵看來,OP已經做到了。我想知道$是否也需要逃脫,la 3反斜槓? OP,你有沒有試過「\\\ $」? –

回答

0

全部更換$你就要成功了:

thing = thing.replaceAll("\\$", "\\\\\\$"); 

你需要躲避第一$,否則這是一個正則表達式的命令字符表示輸入的結束。

第二參數需要大量逸出太的:

  • 第一雙逃逸,以避免與替換字面$
  • 第二和第三雙逃逸,以防止引用組號(轉義$字符)並加入一個實際的反斜槓

話又說回來,沒有正則表達式容易的解決方案:

thing = thing.replace("$", "\\$");  

注意:後一個示例仍然使用Pattern s,但它在內部引用參數爲文字。