我正在尝试修改以下代码:
String[] sarr = (new String("a\\b\\c\\d.jar")).split("[(/)|(\\)]");
System.out.println(sarr[sarr.length-1]);
以便新字符串可以是任何系统上jar文件的任何路径。使用perl正则表达式我会很容易做到,但是使用Java正则表达式我没有得到预期的结果。我怎么能做到这一点?我需要得到d.jar。
我看到了许多不同的帖子,但它们都是具体的,不是一般的,或者不像我需要的那样。
感谢。
答案 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