下划线反斜杠 IntelliJ

6
我正在使用反斜杠作为我正在开发的序列化格式的转义字符。我已将其设置为常量,但IntelliJ正在下划线和突出显示它,并将其标记为红色。悬停时没有错误消息或任何有关它不喜欢它的信息。
这是什么原因,如何解决?

可能是您在其上方/下方的某些语法中有错误,这就是它显示为错误的地方。 - mkobit
你尝试过进行一次清理构建吗? - aioobe
字符数据类型是否只能接受一个字符而不是两个? - ham-sandwich
你也可以尝试“无效缓存/重启”。你使用的是哪个版本? - Wim Deblauwe
@ham-sandwich 不,我刚刚用我的IntelliJ 14尝试了一下,它没有被标红。 - Wim Deblauwe
我已经找到了问题并回答了这个问题。我应该意识到它是这样的。 - user2248702
2个回答

4

IntelliJ比我聪明,知道我在正则表达式中使用了这个字符,需要两个反斜杠,但是IntelliJ也假设我这个渺小的脑袋可以找到问题,而没有给我任何信息。


4
如果这确实是问题,我会提交一个错误报告。错误明显报告在错误的行上。 - aioobe

2

如果 "\" 作为正则表达式使用,那么必须转义

如果你想要像传统正则表达式一样将 "\" 转义成 "\", 那么你还需要再添加两个 \\,总共要写成 \\\\

这是因为 Java 对 "\" 的解释方式:

在 Java 的字面字符串中,反斜杠是一个转义字符。字面上的字符串 "\" 单独代表一个反斜杠。在正则表达式中,反斜杠同样也是一个转义字符。正则表达式 \ 匹配一个单独的反斜杠。当这个正则表达式作为 Java 字符串时,它变成了 "\\"。没错:用4个反斜杠来匹配一个。

正则表达式 \w 匹配一个单词字符。在 Java 字符串中,这被写成 "\w"。

当提供替换字符串给 String.replaceAll() 这类方法时,使用 Java 字符串字面量作为参数,同样会遇到反斜杠的问题。在替换文本中,一个美元符号必须编码为 \$ ,一个反斜杠必须编码为 \,这样你才能用实际的美元符号或反斜杠来替换正则表达式的匹配结果。 然而,在 Java 字符串字面量中,反斜杠也必须被转义。所以一个单独的美元符号在替换文本中变成了 "\$" 作为 Java 字符串字面量来写。而单独的反斜杠则变成了 "\\"。没错:用4个反斜杠来插入一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接