传递给 String.split
的模式具有正则表达式语法,因此可以在 java.util.regex
包中查找用于处理它们的其他工具,例如引用字符串以强制进行文字匹配。
因此,仅使用系统属性和字符串操作的解决方案如下:
String path=System.getProperty("your.property"), sep=System.getProperty("file.separator");
for(String s: path.split(Pattern.quote(sep)))
System.out.println(s);
然而,没有理由不使用专门的API:
Path path = Paths.get(System.getProperty("your.property"));
if(path.isAbsolute()) System.out.println(path.getRoot());
for(Path p: path)
System.out.println(p);
请注意,这也可以正确处理根路径,即在Windows上,驱动器的根目录类似于
C:\
,而不是
C:
,在Linux上,根目录是
/
,而不是空字符串,在仅在分隔符字符处拆分时,两种情况都无法正确处理。
即使在Java 7之前,也有一个可以处理此问题的API:
File path = new File(System.getProperty("your.property"));
for(File f = path; f != null; f = f.getParentFile())
System.out.println(f.getName().isEmpty()? f.getPath(): f.getName());
尽管代码会按相反的顺序迭代元素。
请注意,使用专用API在路径上方两个级别处拆分的特定任务变得非常简单:
Path path = Paths.get(System.getProperty("your.property"));
Path first = path.getParent().getParent(), second = first.relativize(path);
System.out.println("first: "+first);
System.out.println("second: "+second);
java.io.File.separator
。 - caisil