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

String[] strArray = str.split("\\"); 

但是发生了这个错误。

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

4

4 回答 4

28

它应该是

String[] strArray = str.split("\\\\");

之所以会这样,是因为 in Regex,\有特殊含义,所以需要将它转义成\\

在java中,\\应该等于"\\\\"

于 2012-11-01T10:28:32.460 回答
4

String.split(String regex)方法作为参数 a RegEx

正则表达式\\\\\

尝试

String[] strArray = str.split("\\\\");

我们使用的原因"\\\\"

正则表达式\\\

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

所以让"\\"我们使用"\\\\"

希望它不会令人困惑.. :D

于 2012-11-01T10:29:38.587 回答
1

这没有多大意义。您的原始字符串使用 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);
}
于 2012-11-01T10:33:10.560 回答
1

关于转义的一般解决方案: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("\\")); 
于 2012-11-01T10:38:16.273 回答