【发布时间】:2012-11-01 10:27:29
【问题描述】:
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
但是发生了这个错误。
线程“main”java.util.regex.PatternSyntaxException 中的异常:索引 1 附近出现意外内部错误
【问题讨论】:
标签: java
String str = "\u0054\u0068\u0069\u006e\u006b\u0050\u0061\u0064";
String[] strArray = str.split("\\");
但是发生了这个错误。
线程“main”java.util.regex.PatternSyntaxException 中的异常:索引 1 附近出现意外内部错误
【问题讨论】:
标签: java
应该是
String[] strArray = str.split("\\\\");
原因是因为在Regex中,\有特殊含义,需要转义为\\。
在 java 中,\\ 应该等于 "\\\\"
【讨论】:
strArray 将返回 ThinkPad 如何?或演示转义字符 \u 的使用,因此,我们不应回答每个假设的问题,而应坚持问题..尽管您的信息很有用..
String.split(String regex) 方法将RegEx 作为参数。
\ 的正则表达式是 \\\\
试试
String[] strArray = str.split("\\\\");
我们使用"\\\\"的原因,
\ 的正则表达式是 \\
现在\\ 被视为\ 应用转义字符逻辑(\n = 新行,\\ = \)
所以要拥有"\\",我们使用"\\\\"
希望它不会令人困惑.. :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("\\"));
【讨论】: