为什么字符串“:n”被Java中的replaceAll()方法认为与“.n”相同?

0 java string replaceall

为什么:0在语句是 for 时被替换.0

我在 Intellij 以及在线编译器上使用:x&.x和 进行了尝试gdb,但此问题仍然存在。

public class Main
{
    public static void main(String[] args) 
    {
        String s = "Hello:0, World:0.0, het:0";    
        System.out.println(s);

        s = s.replaceAll(".0,", ",");
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Hello:0, World:0.0, het:0
Hello, World:0, het:0
Run Code Online (Sandbox Code Playgroud)

And*_*ner 12

.表示“任何字符”,因为replaceAll使用正则表达式

replace如果要替换文字字符串,请改用:

s = s.replace(".0,", ",");
Run Code Online (Sandbox Code Playgroud)

或者,您可以.通过添加前缀\或使用以下Pattern.quote方法来转义:

s = s.replaceAll("\\.0,", ",");
s = s.replaceAll(Pattern.quote(".0,"), ",");
Run Code Online (Sandbox Code Playgroud)

  • 只是想明确指出OP,但即使它们被命名为“replace”和“replaceAll”,它们_都_替换每个出现的地方,只是以不同的方式。这是造成混乱的常见原因。 (7认同)