【问题标题】:split("\\") and error拆分(“\\”)和错误
【发布时间】: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


    【解决方案1】:

    应该是

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

    原因是因为在Regex中,\有特殊含义,需要转义为\\

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

    【讨论】:

    • @assylias 是的,原始字符串中没有斜杠。但指出的例外是由于无效的正则表达式。
    • @JohnWoo 当然例外是由于无效的正则表达式 - 我的意思是在斜杠上拆分该字符串没有意义:它不包含任何斜杠。
    • @assylias ,是的,我有点同意你的看法,但不完全同意。您所做的可能是回答 OP 在克服当前错误后将面临的下一个问题。这也可能是一个关于解释 unicode 字符用法的技巧问题,以证明 strArray 将返回 ThinkPad 如何?或演示转义字符 \u 的使用,因此,我们不应回答每个假设的问题,而应坚持问题..尽管您的信息很有用..
    • @assylias 我同意 Mukul 的观点。我今天从你那里学到了 unicode,但遗憾的是它没有回答这个问题。在您的回答中,您使用了 4 个反斜杠,但您没有费心解释为什么使用 4 个反斜杠而不是 2 个反斜杠。
    • @assylias ,#peace 兄弟,你是对的,每个用户都可以用自己的方式解决问题。 (y)
    【解决方案2】:

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

    \ 的正则表达式是 \\\\

    试试

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

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

    \ 的正则表达式是 \\

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

    所以要拥有"\\",我们使用"\\\\"

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-24
          • 1970-01-01
          • 1970-01-01
          • 2018-09-07
          • 2020-03-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多