String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
但是发生了这个错误。
线程“主”java.util.regex.PatternSyntaxException 中的异常:索引 1 附近出现意外内部错误
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
但是发生了这个错误。
线程“主”java.util.regex.PatternSyntaxException 中的异常:索引 1 附近出现意外内部错误
它应该是
String[] strArray = str.split("\\\\");
之所以会这样,是因为 in Regex
,\
有特殊含义,所以需要将它转义成\\
。
在java中,\\
应该等于"\\\\"
String.split(String regex)
方法作为参数 a RegEx
。
正则表达式\
是\\\\
尝试
String[] strArray = str.split("\\\\");
我们使用的原因"\\\\"
,
正则表达式\
是\\
现在\\
被视为\
应用转义字符逻辑(\n
= new line ,\\
= \
)
所以让"\\"
我们使用"\\\\"
希望它不会令人困惑.. :D
这没有多大意义。您的原始字符串使用 unicode 字符并且等于ThinkPad
. 所以无论如何都没有斜线可以删除。
换句话说,下面的代码打印ThinkPad
了两次:
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));
}
或者更清楚的是,下面的代码打印为 true:
public static void main(String args[]) {
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String str2 = "ThinkPad";
System.out.println(str == str2);
}
关于转义的一般解决方案:http: //commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split(StringEscapeUtils.escapeJava("\\"));