【问题标题】:String#replaceAll() method not replacing for $ (dollar) [duplicate]String#replaceAll() 方法不替换 $(美元)[重复]
【发布时间】:2016-06-20 20:31:21
【问题描述】:

我已尝试使用内置方法 String#replaceAll() 来替换我的 String 内容中的所有 "$"。但它不起作用。

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

编辑: 虽然Java regular expressions and dollar sign 涵盖了答案,但我的问题仍然可能对使用 String#replaceAll() 时面临同样问题的人有所帮助。 和 Difference between String replace() and replaceAll() 也可能会有所帮助。

该问题的两种可能解决方案是

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


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

【问题讨论】:

  • 为什么HELLO_$_JAVA 应该是预期的输出? _ 应该从哪里来?
  • 我觉得很奇怪"HELLO$JAVA" 字符串被打印为HELLO_$_JAVA
  • 就像前面的 cmets 所暗示的那样,您的代码与您显示的输出不匹配。这不是它的工作方式。
  • 替换所有使用正则表达式。使用 Pattern.quote("$")。
  • 很多DOWNVAOTE ...我没想到:-o

标签: java


【解决方案1】:

replaceAll 方法的第一个参数接受一个正则表达式,而不是文字字符串,$ 在正则表达式中有特殊含义。

你需要在$前面加上一个反斜杠来转义它;并且反斜杠必须是双倍的,因为它在 Java 字符串文字中具有特殊含义。

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

【讨论】:

    【解决方案2】:

    String.replaceAll 用于正则表达式。 '$' 是正则表达式中的特殊字符。

    如果您不尝试使用正则表达式,请使用String.replace,而不是String.replaceAll

    【讨论】:

    • @mmuzahid 为什么需要删除它?它已经关闭了。
    【解决方案3】:

    可能不是最好的方法,但可以解决,

    String parts[] = ss.split("\\$");
    

    然后连接它们中的每一个

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

    然后你在 output

    中有你的替换字符串

    【讨论】:

    • op为什么要这样做?
    • @eis 只是一个解决办法。
    • 太过分了,而不是使用正则表达式在$ 上进行拆分并将数组连接回来,他本来可以用正确的正则表达式替换它。
    猜你喜欢
    • 2019-01-13
    • 2012-09-21
    • 2011-04-06
    • 2012-01-19
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    相关资源
    最近更新 更多