模式中的冗余转义字符

我正在尝试以下代码,它打印错误。 我原以为这会打印出来。 另外,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()); } 

s="\\n"表示为变量s指定反斜杠和n ,它包含两个字符序列\n

Pattern.compile("\\\n")表示您定义与换行符char匹配的正则表达式模式。 因此,此模式将与变量s中的字符串不匹配。

冗余转义警告与您在C字符串文字中使用三反斜杠的事实有关:两个反斜杠定义一个文字反斜杠,第三个是冗余的,即有一个文字\然后一个换行转义序列"\n" ,这意味着文字反斜杠(在文字中用2个反斜杠定义)是多余的,可以删除。

因为"\\n"表示反斜杠\\和字母n"\\\n"计算为反斜杠\\然后换行符\n

你的源码有两个字符, '\''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()); 

Java源代码中字符串文字中的反斜杠被解释为Java™语言规范要求的Unicode转义(第3.3节)或其他字符转义(第3.10.6节)因此,必须在表示正则表达式的字符串文字中加倍反斜杠保护它们免受Java字节码编译器的解释。 例如,字符串文字“\ b”在解释为正则表达式时匹配单个退格字符,而“ \\b ”匹配单词边界。

参考: https : //docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html