Шаблон, переданный в 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);
Обратите внимание, что это также обрабатывает rootправильные пути, т. е. в 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);