我正在尝试以下代码并且它打印错误。 我原以为这会打印出来。 另外,Pattern.Compile()statemenet提供了一个警告'冗余转义字符'。 有人可以帮助我,为什么这不会返回真实,为什么我会看到警告。
public static void main(String[] args) {
String s = "\\n";
System.out.println(s);
Pattern p = Pattern.compile("\\\n");
Matcher mm = p.matcher(s);
System.out.println(mm.matches());
}
答案 0 :(得分:5)
s="\\n"
表示您为变量n
分配反斜杠和s
,并且它包含两个字符的序列,\
和n
。
Pattern.compile("\\\n")
表示您定义与换行符char匹配的正则表达式模式\n
。因此,此模式不会与变量s
中的字符串匹配。
冗余转义警告与您在C字符串文字中使用三反斜杠的事实有关:两个反斜杠定义一个文字反斜杠,第三个是冗余的,即有一个文字\
,然后是换行转义序列"\n"
,这意味着文字反斜杠(在文字中用2个反斜杠定义)是多余的,可以删除。
答案 1 :(得分:2)
由于"\\n"
评估为反斜杠\\
,而n
字母"\\\n"
评估为反斜杠\\
,然后是换行符\n
。
答案 2 :(得分:1)
Java源代码中字符串文字中的反斜杠被Java™语言规范解释为Unicode转义(第3.3节)或其他字符转义(第3.10.6节)因此必须在字符串文字中加倍反斜杠表示正则表达式,以保护它们免受Java字节码编译器的解释。例如,字符串文字" \ b"在解释为正则表达式时匹配单个退格字符,而" \\b
"匹配单词边界。
参考:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 3 :(得分:0)
您的来源有两个字符'\'
和'n'
,如果您的意思是\
后跟换行符,那么它应该是"\\\n"
模式有两个字符'\'和'\ n'(换行符)和\不需要转义字符,因此警告。如果你的意思是\后跟换行符,它应该是"\\\\\n"
(两次\以逃避正则表达式然后\ n)。
String s = "\\\n";
System.out.println(s);
Pattern p = Pattern.compile("\\\\\n");
Matcher mm = p.matcher(s);
System.out.println(mm.matches());