Wrong output using replaceall

后端 未结 4 826
误落风尘
误落风尘 2021-01-16 03:20

Why do i get \"AAAAAAAAA\" instead of \"1A234A567\" from following Code:

String myst = \"1.234.567\";

String test = myst.replaceAll(\".\", \"A\");

System.o         


        
相关标签:
4条回答
  • 2021-01-16 03:55

    Try this:

    String test = myst.replace(".", "A");
    

    The difference: replaceAll() interprets the pattern as a regular expression, replace() interprets it as a string literal.

    Here's the relevant source code from java.lang.String (indented and commented by me):

    public String replaceAll(String regex, String replacement) {
        return Pattern.compile(regex)
                      .matcher(this)
                      .replaceAll(replacement);
    }
    
    
    public String replace(CharSequence target, CharSequence replacement) {
        return Pattern.compile(
                  target.toString(),
                  Pattern.LITERAL /* this is the difference */
               ).matcher(this)
                .replaceAll(
                    Matcher.quoteReplacement(
                        /* replacement is also a literal,
                           not a pattern substitution */
                        replacement.toString()
                ));
    }
    

    Reference:

    • String.replaceAll(String, String)
    • String.replace(CharSequence, CharSequence)
    • Pattern.LITERAL
    0 讨论(0)
  • 2021-01-16 03:56

    replaceAll function take a regular expression as parameter. And the regular expression "." means "any character". You have to escape it to specify that it is the character you want : replaceAll("\\.", "A")

    0 讨论(0)
  • 2021-01-16 04:15

    Because every single char of the input matches the regexp pattern (.). To replace dots, use this pattern: \. (or as a Java String: "\\.").

    0 讨论(0)
  • 2021-01-16 04:18

    You need to escape .

    make it

    String myst = "1.234.567";
    
    String test = myst.replaceAll("\\.", "A");
    
    System.out.println(test);
    
    0 讨论(0)
提交回复
热议问题