Java 拆分(“\\”)和错误

Java 拆分(“\\”)和错误,java,Java,但是发生了这个错误 线程“main”java.util.regex.PatternSyntaxException中出现异常:索引1附近出现意外内部错误 应该是 String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064"; String[] strArray = str.split("\\"); 原因是在Regex中,\具有特殊含义,因此需要将其转义到\中 在java中,\应该等于“\\\\”String.split(Str

但是发生了这个错误

线程“main”java.util.regex.PatternSyntaxException中出现异常:索引1附近出现意外内部错误

应该是

String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";

String[] strArray = str.split("\\"); 
原因是在
Regex
中,
\
具有特殊含义,因此需要将其转义到
\

在java中,
\
应该等于
“\\\\”
String.split(String regex)
方法将参数a
regex
作为参数

\
的正则表达式是
\\\\

试一试

我们使用
“\\\\”
的原因

\
的正则表达式是
\\

现在
\
被视为
\
应用转义字符逻辑(
\n
=新行,
\
=
\

所以我们使用
“\\\”


希望它不会让人困惑这没有多大意义。原始字符串使用unicode字符,等于
ThinkPad
。所以无论如何都没有要删除的斜杠

换句话说,下面的代码会打印两次
ThinkPad

String[] strArray = str.split("\\\\");
或者更清楚地说,下面的代码打印的是真的:

public static void main(String args[]) {
    String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
    System.out.println(str);
    String[] strArray = str.split("\\\\");
    System.out.println(Arrays.toString(strArray));
}

有关转义的一般解决方案:


@assylias是原始字符串中没有斜杠。但是指出的异常是因为无效的正则表达式。@JohnWoo当然,异常是由于无效的正则表达式造成的-我想说的是,用斜杠分割字符串是没有意义的:它不包含任何斜杠。@assylias,是的,我有点同意你,但不是完全同意。你所做的可能是回答OP在通过当前错误后将面临的下一个问题。此外,这可能是一个关于解释unicode字符用法的技巧性问题,以演示
strArray
将如何返回
ThinkPad
?或者为了演示转义字符
\u
的用法,我们不应该回答每个假定的问题,而应该坚持回答这个问题。。你的信息很有用。@assylias我同意Mukul的观点。我今天从你们那里学到了unicode,但遗憾的是它没有回答这个问题。在你的回答中,你使用了4个反斜杠,但你没有解释为什么你使用了4个反斜杠而不是2个反斜杠。@assylias,#peace brother,你是对的,这取决于每个用户以自己的方式解决问题。(y)
public static void main(String args[]) {
    String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
    System.out.println(str);
    String[] strArray = str.split("\\\\");
    System.out.println(Arrays.toString(strArray));
}
public static void main(String args[]) {
    String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
    String str2 = "ThinkPad";
    System.out.println(str == str2);
}
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split(StringEscapeUtils.escapeJava("\\"));