Java在反斜杠上拆分字符串

时间:2016-08-07 02:49:53

标签: java string

我有一个存储为字符串的文件的路径:"C:\\Users\\Owner\\Desktop\\foo.txt"。我想仅隔离"foo.txt"部分,所以我尝试将字符串拆分为反斜杠,如"C:\\Users\\Owner\\Desktop\\foo.txt".split("\\"),然后获取数组的最后一个元素。如果我理解正确,那么第一个反斜杠应该逃避第二个,使它不是一个特殊字符,因此字符串将分裂为反斜杠字符。但是,当我运行代码时,我会抛出java.util.regex.PatternSyntaxException。在java中拆分反斜杠的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

哦不......请不要开始搞乱Windows文件名。你不想要的一件事是拥有与平台相关的代码。而不是这个,使用标准Java库:

System.out.println(new File("C:\\Users\\Owner\\Desktop\\foo.txt").getName());

最后,如果您真的必须手动解析路径,我会使用File.separatorChar来使代码可移植。

// hardcoded here for the example, but you would actually get it from somewhere
String path = "C:\\Users\\Owner\\Desktop\\foo.txt"; 

int i = path.lastIndexOf(File.separatorChar);
String last = i < 0 || i == s.length() ? "" : path.substring(i + 1);
System.out.println(last);

这也比分割字符串便宜,因为你只对最后一个元素感兴趣。

答案 1 :(得分:6)

反斜杠是保留的,所以你必须使用像这样的双反斜杠:

filename.split("\\\\")

为了使这个解决方案在不同平台上保持一致,最好使用:

filename.split(Pattern.quote(File.separator))

或者,正如Dici指出的那样,你可以这样做:

new File(filename).getName()