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