需要帮助理解Java正则表达式的意外输出

时间:2014-03-10 13:16:07

标签: java regex

package com.j;

public class Program {
public static void main(String[] args) {
    System.out.println(Puzzel.class.getName().replaceAll(".", "/")
            + ".class");

    System.out.println(Program.class.getName());

}

}

在上面的程序中我期待输出com / j / Program.class

但它来了//////.class y?

3 个答案:

答案 0 :(得分:6)

在替换中,.被视为正则表达式,其中.表示“任何字符”,此处替换为/,因此输出变为

////////////.class

对于预期答案,更改表达式以转义.

Name.class.getName().replaceAll("\\.", "/") + ".class");

然后输出将是您所期望的:

com/j/Puzzel.class

答案 1 :(得分:2)

因为.是正则表达式的特殊字符。你应该用反斜杠来逃避它。

答案 2 :(得分:0)

replaceAll()为匹配器提供正则表达式。您的代码说要用.替换每个字符(/)。您需要replaceAll("\\.")replaceAll("\\\\.")。我永远不会记得有多少逃脱使用。