Java 字符串#replaceAll()方法不替换$(美元)
我尝试了内置方法String#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 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为什么需要删除它?已经关门了。