嗨,我正在尝试拆分由竖线分隔的字符串。例如:
String str = "a=1|b=2";
在java中,我们应该这样做:
str.split("\\|");
如果我使用单斜杠:
str.split("\|");
编译器给出错误:
无效的转义序列(有效的是 \b \t \n \f \r \" \' \ )
谁能解释我为什么会这样?谢谢!
反斜杠\
是一个特殊字符。在 Java 世界中,它用于转义字符。
管道|
是 Regex 世界中的一个特殊字符,意思是“或”。
要将管道用作分隔符,您需要对其进行转义(以便在正则表达式解析期间可以识别),因此您需要在正则表达式中获取它:\|
。
但是由于反斜杠在 Java 中是一个特殊字符,并且您使用的是 String 对象,因此您必须转义反斜杠,以便将其解释为最终预期的最终结果:\|
为此,您只需用另一个反斜杠转义反斜杠:\\|
第一个反斜杠转义了第二个反斜杠(java 要求),它转义了管道(正则表达式要求)。
在 Java 字符串中,反斜杠需要用另一个反斜杠转义。因此,虽然正则表达式的“规范”形式确实是\|
,但作为 Java 字符串,这必须写成"\\|"
。