拆分(“\\”)和错误

时间:2012-11-01 10:27:30

标签: java

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

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

但是发生了这个错误。

  

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

4 个答案:

答案 0 :(得分:20)

应该是

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

原因是因为在Regex中,\具有特殊含义,因此您需要将其转义为\\

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

答案 1 :(得分:3)

String.split(String regex)方法将参数设为RegEx

\的RegEX为\\\\

尝试

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

我们使用"\\\\"

的原因

\的正则表达式为\\

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

为了让"\\"我们使用"\\\\"

希望它不会混淆..:D

答案 2 :(得分:0)

这没有多大意义。您的原始字符串使用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);
}

答案 3 :(得分:0)

关于转义的一般解决方案: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("\\"));