以下代码片段在linux下工作正常,但在windows下给我错误(这很奇怪,因为jvm / jdk应该是与操作系统无关的)。
File f = ...
String[] split = f.getPath().split(File.separator);
这是错误:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.split(Unknown Source)
at java.lang.String.split(Unknown Source)
任何想法有什么不对?
答案 0 :(得分:9)
问题是反斜杠是使用正则表达式的特殊字符(其他特殊字符的转义字符)。你应该使用
String[] split = f.getPath().split("\\\\");
以便按符号\
拆分。
如果您想让此平台保持独立,我会看到您遇到的问题。在这种情况下,你可以这样做:
String splitter = File.separator.replace("\\","\\\\");
String[] split = abc.split(splitter);
答案 1 :(得分:0)
您应该考虑使用java.nio引入的Path类。即使您混合使用分隔符,它也可以工作。这段代码:
Path path = Paths.get("c:\\a\\with spaces/b");
for(Iterator<Path> it= path.iterator(); it.hasNext();) {
System.out.println(it.next());
}
打印:
a
with spaces
b