我正在使用反斜杠作为我正在开发的序列化格式的转义字符。我已将其设置为常量,但IntelliJ正在下划线和突出显示它,并将其标记为红色。悬停时没有错误消息或任何有关它不喜欢它的信息。
这是什么原因,如何解决?
这是什么原因,如何解决?
IntelliJ比我聪明,知道我在正则表达式中使用了这个字符,需要两个反斜杠,但是IntelliJ也假设我这个渺小的脑袋可以找到问题,而没有给我任何信息。
如果 "\" 作为正则表达式使用,那么必须转义。
如果你想要像传统正则表达式一样将 "\" 转义成 "\", 那么你还需要再添加两个 \\
,总共要写成 \\\\
。
这是因为 Java 对 "\" 的解释方式:
在 Java 的字面字符串中,反斜杠是一个转义字符。字面上的字符串 "\" 单独代表一个反斜杠。在正则表达式中,反斜杠同样也是一个转义字符。正则表达式 \ 匹配一个单独的反斜杠。当这个正则表达式作为 Java 字符串时,它变成了 "\\"。没错:用4个反斜杠来匹配一个。
正则表达式 \w 匹配一个单词字符。在 Java 字符串中,这被写成 "\w"。
当提供替换字符串给 String.replaceAll() 这类方法时,使用 Java 字符串字面量作为参数,同样会遇到反斜杠的问题。在替换文本中,一个美元符号必须编码为 \$ ,一个反斜杠必须编码为 \,这样你才能用实际的美元符号或反斜杠来替换正则表达式的匹配结果。 然而,在 Java 字符串字面量中,反斜杠也必须被转义。所以一个单独的美元符号在替换文本中变成了 "\$" 作为 Java 字符串字面量来写。而单独的反斜杠则变成了 "\\"。没错:用4个反斜杠来插入一个。