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?
答案 0 :(得分:6)
在替换中,.
被视为正则表达式,其中.
表示“任何字符”,此处替换为/
,因此输出变为
////////////.class
对于预期答案,更改表达式以转义.
:
Name.class.getName().replaceAll("\\.", "/") + ".class");
然后输出将是您所期望的:
com/j/Puzzel.class
答案 1 :(得分:2)
因为.
是正则表达式的特殊字符。你应该用反斜杠来逃避它。
答案 2 :(得分:0)
replaceAll()为匹配器提供正则表达式。您的代码说要用.
替换每个字符(/
)。您需要replaceAll("\\.")
或replaceAll("\\\\.")
。我永远不会记得有多少逃脱使用。