java.util.regex.PatternSyntaxException - 当使用 split("\\");
java.util.regex.PatternSyntaxException - when using split("\\");
我正在用我自己的方式解决 this problem。我正在尝试将文件路径拆分为驱动器、文件夹和文件名,全部放入一个数组中。
问题:
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
我的问题:
- 为什么
"\"
会抛出异常,而 "[\b]"
不会?
- 为什么
split()
不拆分路径字符串?
您应该在 Java 正则表达式中使用双重转义,即:
String regex = "\\";
或使用静态Pattern.quote(String)
方法:
String regex = Pattern.quote("\");
因为\b
是单个字符,编译器知道,他们是朋友。
然而,反斜杠 (\
) 在 Java 中由 \
表示,而 \
是 无效的 正则表达式,在为了逃避它,你应该使用:
\\
↓ ↓
escaping
解决方案:
- 如上所示转义
- 别逃,让
Pattern#quote
帮你处理
我正在用我自己的方式解决 this problem。我正在尝试将文件路径拆分为驱动器、文件夹和文件名,全部放入一个数组中。
问题:
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
我的问题:
- 为什么
"\"
会抛出异常,而"[\b]"
不会? - 为什么
split()
不拆分路径字符串?
您应该在 Java 正则表达式中使用双重转义,即:
String regex = "\\";
或使用静态Pattern.quote(String)
方法:
String regex = Pattern.quote("\");
因为\b
是单个字符,编译器知道,他们是朋友。
然而,反斜杠 (\
) 在 Java 中由 \
表示,而 \
是 无效的 正则表达式,在为了逃避它,你应该使用:
\\
↓ ↓
escaping
解决方案:
- 如上所示转义
- 别逃,让
Pattern#quote
帮你处理