在Windows / Linux / OSX上提取完整文件名

时间:2013-03-22 10:10:52

标签: java regex

我正在尝试修改以下代码:

 String[] sarr = (new String("a\\b\\c\\d.jar")).split("[(/)|(\\)]");
 System.out.println(sarr[sarr.length-1]);

以便新字符串可以是任何系统上jar文件的任何路径。使用perl正则表达式我会很容易做到,但是使用Java正则表达式我没有得到预期的结果。我怎么能做到这一点?我需要得到d.jar。

我看到了许多不同的帖子,但它们都是具体的,不是一般的,或者不像我需要的那样。

感谢。

2 个答案:

答案 0 :(得分:1)

Java字符串文字"[(/)|(\\)]"表示正则表达式[(/)|(\)],它是一个字符类,可以匹配任何单个(/|)字符。相反,您可能需要正则表达式[/\\](匹配单个正斜杠或反斜杠),这反过来意味着"[/\\\\]"作为Java字符串文字。

str.split("[/\\\\]");

或者,如果您知道您将始终处理当时正在运行的系统的原生路径(即在Windows上运行时为C:\Users\something,而在Linux上运行时为/home/user / Mac / etc。)然后你可以使用java.io.File类:

File f = new File(fullPath);
String name = f.getName();

getName()只返回姓氏组件,还有getPath(),它返回存储在File对象中的完整路径字符串(可能是相对路径)和{{1} }返回绝对路径(如果这是绝对路径,则与getAbsolutePath()相同;如果是相对的,则返回前缀为当前工作目录的getPath()。)

但是,如果您可能在类Unix系统上处理Windows路径,反之亦然,那么您将不得不坚持使用自己的字符串操作。

答案 1 :(得分:1)

使用java.io.File而不是使用正则表达式或任何其他字符串解析机制。它提供了许多方法,以获取文件的名称File.getName()

String file_name = new File("a\\b\\c\\d.jar").getName();
System.out.println(file_name);

输出:

  

d.jar