Java中的String replaceAll()方法

4
你能解释一下输出吗?
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

通过移除$,它就可以正常工作。为什么呢?

数组下标越界异常 - Monisha
答案是:“使用“\$10.00”-但我不知道为什么;-)” - Florian Schaetz
1
$ 是一个正则表达式控制字符,因此像其他控制字符一样,必须进行转义。由于 Java 是 Java,所以转义必须是双反斜杠。 - Ankur Anand
在这里使用JDK 1.7.0_45仍然会出现相同的异常。无论如何,Codebender的解释是正确的。 - Florian Schaetz
5个回答

12

String.replaceAll() 接受一个正则表达式

在正则表达式中,使用 $ 来替换捕获的分组。例如 $1 表示第一个捕获分组的内容... 以此类推。

在您的情况下,既然根本不使用正则表达式,请使用 String.replace("AMOUNT", amount)


或者:用“\”转义“$”。 - Florian Schaetz
3
当你不使用正则表达式时,不要使用正则表达式方法。+1 支持这种做法。 - RealSkeptic

4

$是正则表达式中的特殊字符。您可以通过使用\\进行转义。

      String amount = "\\$10.00";

0

你需要将它写成

String amount = "\\$10.00";

0

因为$是特殊的正则表达式符号。如果你想将它用作普通符号,需要进行转义。

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

-3

当提供 $ 时,它会将其视为正则表达式,但实际上它并不是。


replaceAll的签名是replaceAll(String regex, String replacement) - PDStat
目前不是正则表达式,我们需要转义 $ 符号。 - Rahul Yadav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接