Java 拆分(“\\”)和错误
但是发生了这个错误 线程“main”java.util.regex.PatternSyntaxException中出现异常:索引1附近出现意外内部错误 应该是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
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
原因是在Regex
中,\
具有特殊含义,因此需要将其转义到\
中
在java中,\
应该等于“\\\\”
String.split(String regex)
方法将参数aregex
作为参数
\
的正则表达式是\\\\
试一试
我们使用“\\\\”
的原因
\
的正则表达式是\\
现在\
被视为\
应用转义字符逻辑(\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("\\"));