【问题标题】:java.util.regex.PatternSyntaxException - when using split("\\");java.util.regex.PatternSyntaxException - 当使用 split("\\");
【发布时间】:2015-04-01 17:14:23
【问题描述】:

我正在以自己的方式解决this problem。我正在尝试将文件路径拆分为驱动器、文件夹和文件名,全部拆分为一个数组。

Complete class. (Github)

问题:

String regex = "\\";
String [] divisions = path.split (regex);

这给了我一个 java.util.regex.PatternSyntaxException。我查了wiki,发现[\b]

String regex = "[\b]";
String [] divisions = path.split (regex);

这不起作用。它不会抛出异常,也不会根据退格键拆分我的文件路径。

输入:

► Enter path -- 
C:\User\Admin\NekedGaben.jpg

输出:

→ Path = C:\User\Admin\NekedGaben.jpg
→ File name = C:\User\Admin\NekedGaben
→ Extension = .jpg

我的问题:

  1. 为什么"\\" 会抛出异常,而"[\b]" 不会?
  2. 为什么split() 不拆分路径字符串?

【问题讨论】:

  • 什么是正则表达式中的\? (不是"\\",这是一个字符串字面量。)
  • 您想更仔细地阅读 wiki:[\b] 匹配后退空格,而不是后退斜杠。为什么要匹配退格键?我不知道,我从来不需要。但是\b本身匹配一个词的边界,不能表示在一个字符类里面,所以它的意思随意的变成了退格。

标签: java arrays regex string exception


【解决方案1】:

您应该在 Java 正则表达式中使用双重转义,即:

String regex = "\\\\";

或者使用静态Pattern.quote(String)方法:

String regex = Pattern.quote("\\");

【讨论】:

    【解决方案2】:

    因为\b 是单个字符,编译器知道,它们是朋友。

    然而反斜杠(\)在Java中由\\表示,而\无效正则表达式,为了转义它,你应该使用:

    \\\\
    ↓ ↓
    escaping
    

    解决方案:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      相关资源
      最近更新 更多