0

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

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

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

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

谢谢。

4

2 回答 2

1

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

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

或者,如果您知道您将始终处理您当时正在运行的系统的本机路径(即C:\Users\something在 Windows 上运行时以及/home/user在 Linux/Mac/等上运行时),那么您可以使用java.io.File该类:

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

getName()只返回姓氏组件,还有getPath()返回存储在File对象中的完整路径字符串(可能是相对路径)和getAbsolutePath()返回绝对路径(就像getPath()这已经是绝对路径一样,或者getPath()以当前工作目录为前缀如果是相对的)。

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

于 2013-03-22T10:22:15.513 回答
1

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

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

输出:

d.jar

于 2013-03-22T10:35:30.057 回答