PatternSyntaxException:Windows下`.split(File.separator)`的索引1附近出现意外的内部错误

时间:2015-12-07 08:15:26

标签: java

以下代码片段在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)

任何想法有什么不对?

2 个答案:

答案 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