4 回答
TA贡献1820条经验 获得超10个赞
使用以下方法。
//Windows
String s = "C:\\Test1\\Test2\\Test3\\Test4";
String[] output = s.split(("/".equals(File.separator))? File.separator : "\\\\" );
//output: [C:, Test1, Test2, Test3, Test4]
//Linux:
String linuxString = "/Test1/Test2/Test3/Test4";
String[] linuxOutput = linuxString.split(("/".equals(File.separator))? File.separator : "\\\\" );
//output: [, Test1, Test2, Test3, Test4]
希望这能解决这个问题。
TA贡献1777条经验 获得超3个赞
传递给的模式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:\, not 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);
添加回答
举报