Java 字符串#replaceAll()方法不替换$(美元)

Java 字符串#replaceAll()方法不替换$(美元),java,Java,我尝试了内置方法String#replaceAll()来替换字符串内容中的所有“$”。但它不起作用 String ss = "HELLO_$_JAVA"; System.out.println(ss.indexOf("$")); System.out.println(ss); ss = ss.replaceAll("$", ""); System.out.println(ss);// 'HELLO__JAVA' is expected 输出: 6 HELLO_$_JAVA HELLO_$_JA

我尝试了内置方法String#replaceAll()来替换字符串内容中的所有“$”。但它不起作用

String ss = "HELLO_$_JAVA";
System.out.println(ss.indexOf("$"));
System.out.println(ss);
ss = ss.replaceAll("$", "");
System.out.println(ss);// 'HELLO__JAVA' is expected
输出:

6
HELLO_$_JAVA
HELLO_$_JAVA
预期产出:

6
HELLO_$_JAVA
HELLO__JAVA
编辑: 虽然涵盖了答案,但我的问题可能对使用String#replaceAll()时遇到相同问题的人有所帮助。 及 也可能有帮助

这个问题有两种可能的解决办法

ss = ss.replace("$", "");

ss = ss.replaceAll("\\$", "");
用于正则表达式<代码>“$”是正则表达式中的特殊字符


如果您不想使用正则表达式,请使用,而不是。

可能不是最好的方法,而是一种解决方法

String parts[] = ss.split("\\$");
然后对每一个都进行检查

String output = "";
for(String each:parts){
    output=output+each;
}

然后在输出中替换字符串

方法的
replaceAll
的第一个参数采用正则表达式,而不是文字字符串,
$
在正则表达式中具有特殊意义

您需要在
$
前面加一个反斜杠来避开它;反斜杠必须是双精度的,因为它在Java字符串文本中有特殊的含义

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

为什么
HELLO\u$\ ujava
应该是预期的输出?
应该从哪里来?我发现非常奇怪的是
“HELLO$JAVA”
字符串被打印为
HELLO\u$\ u JAVA
,就像前面的注释所暗示的那样,您的代码与您显示的输出不匹配。这不是它的工作方式。全部替换使用正则表达式。使用Pattern.quote($)。大量的DOWNVAOTE。。。我没想到:-owhy-op应该这样做?@eis只是一个解决办法。非常过分,他本来可以用正确的正则表达式替换它,而不是在
$
上使用正则表达式进行拆分并将数组浓缩回来。@mmuzahid为什么需要删除它?已经关门了。