【问题标题】:How to escape $ in java?如何在java中转义$?
【发布时间】:2012-08-31 04:17:36
【问题描述】:

我正在尝试下面的代码,但出现错误

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)

我想要结果

aaa xy$z bbb

【问题讨论】:

    标签: java regex special-characters


    【解决方案1】:

    改用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

    【讨论】:

      【解决方案2】:

      如果替换字符串包含美元符号或反斜杠字符,则应使用

      Matcher.quoteReplacement()
      

      所以改变

      String z=y.replaceAll("$", "\\$");` 
      

      String z = Matcher.quoteReplacement(y);
      

      【讨论】:

      • String z=y.replaceAll("\\$", "\\\\$"); - 仍然不会编译
      • 现在它会在你真正想要aaa xy$z bbb时打印aaa xy\$z bbb
      【解决方案3】:

      报错原因是行后:

      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
      

      【讨论】:

        【解决方案4】:

        问题 id 由于replaceFirst String z=y.replaceAll("$", "\\$"); 的值为xy$z$

        用给定的替换替换此字符串中与给定正则表达式匹配的第一个子字符串。 以str.replaceFirst(regex, repl) 形式调用此方法会产生与表达式完全相同的结果

        Pattern.compile(regex).matcher(str).replaceFirst(repl)
        

        注意替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时不同;

        【讨论】:

        • 就像我告诉 xdazz:做 String z=y.replaceAll("\\$", "\\\\$"); - 仍然无法编译
        • 问题是replace首先你可以查看链接了解更多详情
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        相关资源
        最近更新 更多