Заменить точку между косой чертой, т.е. '/./' одинарной косой чертой '/' - PullRequest
0 голосов
/ 09 ноября 2018

Для этой строки dirPath,

String dirPath = "c:/create/a/dir/very/deep/inside/../././../../../dir/";

Я хочу, чтобы выходная строка выглядела так:

"c:/create/a/dir/very/deep/inside/../../../../dir/";

Я использовал:

dirPath.replaceAll("/[.]/", "/");

но это дало:

c:/create/a/dir/very/deep/inside/.././../../../dir/
                                   ^^^ 

затем попробовал еще с replaceAll как:

dirPath.replaceAll("/[.]/", "/").replaceAll("/[.]/", "/");

и это сработало!

Мой вопрос: почему один звонок не может достичь того же результата? Как добиться этого самым простым способом?

P.S. Еще одно регулярное выражение, которое не сработало для меня: .replaceAll("($|/)[.]/", "$1")

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете использовать шаблон предпросмотра, чтобы избежать использования косой черты, необходимой для следующего совпадения:

dirPath.replaceAll("/\\.(?=/)", "")

Демо: https://regex101.com/r/qWKVU3/1 или http://tpcg.io/ijmYJF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...