如何在Java中转义$符号?

4
我尝试以下代码,但是出现了错误。
String x = "aaa XXX bbb";
    String replace = "XXX";
    String y = "xy$z";
    String z=y.replaceAll("$", "\\$");
    x = x.replaceFirst(replace, z);
    System.out.println(x);

错误
Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
    at java.util.regex.Matcher.appendReplacement(Unknown Source)
    at java.util.regex.Matcher.replaceFirst(Unknown Source)
    at java.lang.String.replaceFirst(Unknown Source)
    at Test.main(Test.java:10)

I want result as

aaa xy$z bbb
3个回答

7
使用replace()代替,它不使用正则表达式,因为你根本不需要它们。
String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy$z";
x = x.replace(replace, y);
System.out.println(x);

这将按预期打印出 aaa xy$z bbb

3
如果替换字符串中包含美元符号或反斜杠字符,应使用反斜杠进行转义。
Matcher.quoteReplacement()

所以改变。
String z=y.replaceAll("$", "\\$");` 

to

String z = Matcher.quoteReplacement(y);

1
执行 String z=y.replaceAll("\\$", "\\\\$"); - 仍无法编译。 - Nir Alfasi
2
现在它会打印出 aaa xy\$z bbb,而你真正想要的是 aaa xy$z bbb - Nir Alfasi

1
错误的原因是在以下这行代码之后:
String z=y.replaceAll("$", "\\$");

z的值为:xy$z$,你真正想做的是:

String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy\\$z";            
x = x.replaceFirst(replace, y);
System.out.println(x);

这将输出:

aaa xy$z bbb

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