Как заменить несколько слэша и обратного слэша в строке одним? - PullRequest
4 голосов
/ 29 апреля 2019

Моя цель - заменить все "/" и "\" на один "\".

Введите:

String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";

Выход:

String path = "H\ello\Wo\rld\!\";

Вопрос:

Есть ли способ сделать все это в одной строке?

Мое решение (работает!):

  1. изменить все на один и тот же символ
  2. заменить все символы "/" одним слешем
  3. верни его в нормальное состояние

Я узнал, что мне нужно регулярное выражение и что "[X] +" поместит все возможные комбинации, например. «XXfXfXXXX» - «XfXfX».

Я ищу что-то вроде: (псевдокод)

path = path.replaceAll("[\\/]+", "\\");

Я пробовал несколько комбинаций этого, но каждый раз это выдает ошибки.

Мое решение:

path = path.replace("\\", "/");
path = path.replaceAll("[/]+", "/");

pfad = pfad.replace("/", "\\");

Ответы [ 2 ]

4 голосов
/ 29 апреля 2019

Попробуйте этот шаблон для сопоставления группам слешей и обратных слешей: (?:\\+|\/+) и замените его на \\.

Объяснение:

(?:...) - группа без захвата

\\+ - соответствует одному или нескольким \

\/+ - соответствует одному или нескольким /

| - чередование: комбинация совпадений справа или слева

Демо

В качестве альтернативы вы можете использовать шаблон [\/\\]+, который соответствует одному или нескольким из \ или /

Еще одна демка

1 голос
/ 29 апреля 2019

Используйте

.replaceAll("[\\\\/]+", "\\\\")

См. График регулярных выражений:

enter image description here

Шаблон [\\/]+ соответствует \ или / один или несколько раз. Шаблон замены - \\, так как обратный слеш в шаблоне замены - special в Java, он используется для экранирования символа $, который обозначает буквальный символ $. Чтобы сопоставить обратную косую черту литерала, вам нужно использовать четыре \ в строковом литерале регулярного выражения .

См. Демонстрация Java онлайн :

String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";
System.out.println(path.replaceAll("[\\\\/]+", "\\\\"));
// => H\ello\Wo\rld\!\
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...