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);
添加回答
舉報