2015-08-18 79 views
4

你能解釋一下輸出字符串的replaceAll()在Java中

String str = "Total Amount is AMOUNT"; 
String amount = "$10.00"; 
str = str.replaceAll("AMOUNT", amount); 
System.out.println(str); 

的輸出是什麼? 它拋出異常

Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1 

通過刪除$它的工作。爲什麼?

+0

IndexOutOfBoundsException異常 – Monisha

+0

答案是:使用「\\ $ 10.00」 - 但我不知道爲什麼;-) –

+1

$是一個正則表達式控制字符,所以就像它必須轉義任何其他控制字符。 Java是Java,逃逸必須是雙反斜槓。 –

回答

0

因爲$是特殊的正則表達式符號逃脫它。如果你想使用它如常用的符號。

String str = "Total Amount is AMOUNT"; 
String amount = "\\$10.00"; 
str = str.replaceAll("AMOUNT", amount); 
System.out.println(str); 
-3

當提供$時,它假定它是正則表達式,但實際上不是。

+0

replaceAll的簽名是'replaceAll(String regex,String replacement)' – PDStat

+0

它目前不是正則表達式,我們需要轉義$符號。 –

12

String.replaceAll()接受正則表達式

而在正則表達式中$用於替換捕獲的組。像$1表示第一個捕獲組的內容......等等。

在你的情況,因爲你不使用正則表達式都只是用String.replace("AMOUNT", amount)

+0

或者:使用「\\」退出$。 –

+3

當你不使用正則表達式時,不要使用正則表達式方法。 +1。 – RealSkeptic

4

$是在正則表達式特殊字符。 您可以通過使用\\

 String amount = "\\$10.00"; 
0

你需要把它寫成

String amount = "\\$10.00"; 
相關問題