How to escape $ in java?

前端 未结 4 1431
别那么骄傲
别那么骄傲 2021-01-19 09:17

I am trying below code but getting error

String x = \"aaa XXX bbb\";
    String replace = \"XXX\";
    String y = \"xy$z\";
    String z=y.replaceAll(\"$\",          


        
相关标签:
4条回答
  • 2021-01-19 09:50

    The reason for the error is that after the line:

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

    The value of z is: xy$z$ what you really want to do is:

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

    which will output:

    aaa xy$z bbb
    
    0 讨论(0)
  • 2021-01-19 09:53

    The problem id due to replaceFirst The value of String z=y.replaceAll("$", "\\$"); is xy$z$

    Replaces the first substring of this string that matches the given regular expression with the given replacement. An invocation of this method of the form str.replaceFirst(regex, repl) yields exactly the same result as the expression

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

    Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string;

    0 讨论(0)
  • 2021-01-19 09:54

    If the replacement string includes a dollar sign or a backslash character, you should use

    Matcher.quoteReplacement()
    

    So change

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

    to

    String z = Matcher.quoteReplacement(y);
    
    0 讨论(0)
  • 2021-01-19 09:59

    Use replace() instead, which doesn't use regular expressions, since you don't need them at all:

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

    This will print aaa xy$z bbb, as expected.

    0 讨论(0)
提交回复
热议问题