Работа с протоколом в URL-строке, используя регулярное выражение - PullRequest
0 голосов
/ 30 мая 2018

Проблема

В моем приложении Java у меня есть код

Paths.get(v_DirBufferdata).resolve(Paths.get(v_DirIndata).relativize(Paths.get(c_FileIndataLocation))).toString();

с

v_DirBufferdata, равным "file://workflow/../buffer/"

v_DirIndata будет "/tmp/C4243/indata"

c_FileIndataLocation будет "/tmp/C4243/indata/one_doc/pv.pdf"

, и я хотел бы получить

"file://workflow/../buffer/one_doc/pv.pdf".

однако я получаю

"file:/workflow/../buffer/one_doc/pv.pdf".

Regex-Solution?

Одной простой идеей получить обратную косую черту протокола является использование регулярных выражений.Тем не менее, я хочу убедиться, что обрабатывается только ошибка протокола - ни в коем случае не папка с именем «file:».

В частности, «file: /» следует заменить на «file: //»,но если "file: //" уже существует, я не хочу получать "file: ///".Кроме того, «file: /» следует заменять только в том случае, если он находится в начале строки.Пока у меня есть:

"file:/".replaceFirst("^file:/[^/]", "file://")

Очевидно, это еще не работает.Как мне это сделать?

Альтернативное решение

Если есть другое решение, которое не требует взлома регулярных выражений, я тоже открыт для него.

1 Ответ

0 голосов
/ 30 мая 2018

Либо используйте отрицательный взгляд:

s.replaceFirst("^file:/(?!/)", "file://")

, либо просто перехватите один символ, следующий за :/, и используйте $1 вместо:

s.replaceFirst("^file:/([^/])", "file://$1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...