java.util.regex.PatternSyntaxException - 当使用 split("\\");

java.util.regex.PatternSyntaxException - when using split("\\");

我正在用我自己的方式解决 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() 不拆分路径字符串?

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

String regex = "\\";

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

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

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

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

\\
↓ ↓
escaping

解决方案: