使用replaceall输出错误

Clo*_*ble 1 java string

为什么我从以下代码获得"AAAAAAAAA"而不是"1A234A567":

String myst = "1.234.567";

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

System.out.println(test);
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Sea*_*oyd 7

试试这个:

String test = myst.replace(".", "A");
Run Code Online (Sandbox Code Playgroud)

区别: replaceAll()将模式解释为正则表达式,replace()将其解释为字符串文字.

这是相关的源代码java.lang.String(由我缩进和评论):

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()
            ));
}
Run Code Online (Sandbox Code Playgroud)

参考:


Vin*_*nze 6

replaceAllfunction将正则表达式作为参数.而正则表达式"." 意思是"任何角色".你必须转义它以指定它是你想要的角色:replaceAll("\\.", "A")