java正则表达式转义字符

bol*_*lei -1 java regex

嗨,我正在尝试拆分由竖线分隔的字符串。例如:

String str = "a=1|b=2";
Run Code Online (Sandbox Code Playgroud)

在java中,我们应该这样做:

 str.split("\\|");
Run Code Online (Sandbox Code Playgroud)

如果我使用单斜杠:

str.split("\|");
Run Code Online (Sandbox Code Playgroud)

编译器给出错误:

无效的转义序列(有效的是 \b \t \n \f \r \" \' \ )

谁能解释一下为什么会发生这种情况?谢谢!

cle*_*ent 5

反斜杠\是一个特殊字符。在 Java 世界中,它用于对字符进行转义。

管道|是正则表达式世界中的一个特殊字符,表示“”。

要将管道用作分隔符,您需要对其进行转义(以便在正则表达式解析期间可以识别它),因此您需要在正则表达式中获取它:\|

但由于反斜杠是 Java 中的一个特殊字符,并且您使用的是 String 对象,因此您必须对反斜杠进行转义,以便将其解释为最终预期的最终结果: \|

为此,您只需使用另一个反斜杠转义反斜杠: \\|

第一个反斜杠转义第二个反斜杠(java 要求),后者转义管道(正则表达式要求)。