Я нахожусь в процессе создания Java приложения, которое, в частности, принимает относительный путь к файлу в форме
String path = "path/to/Plansystem/Xslt/omraade/../../../Kms/Xslt/Rense/Template.xslt"
и сокращает / упрощает выражение пути, так что оно обеспечивает эквивалентный путь , но без двойных точек. То есть, мы должны получить эту строку:
String result = "path/to/Kms/Xslt/Rense/Template.xslt"
В настоящее время я определил следующее регулярное выражение:
String parentDirectory = $/\/(?!\.)([\w,_-]*)\.?([\w,_-]*)\/\.\.\//$
Затем я заменяю любое совпадение одним sla * sh. Этот подход, кажется, работает, и я придумал выражение, использующее Regexr.com , но мне кажется, что мой подход немного хакерский, и я был бы удивлен, если бы эта специфическая c функциональность была не доступно в какой-то хорошо проверенной, хорошо развитой библиотеке. Кто-нибудь знаком с такой библиотекой?
Редактировать: Основываясь на ответах rzwitserloot и Энди Тернера, я понял, что следующие методы работают для меня:
public static String slash = "/"
public static final String backslashes = $/\\+/$
static String normalizePath(String first, String... more) {
String pathToReturn = Paths.get(first, more).normalize().toString().replaceAll(backslashes, slash)
return pathToReturn
}
Обратите внимание, что замена I make в конце создается только из-за необходимости c, в которой я хочу сохранить нотацию unix (даже при работе на Windows).