Строка заменяет обратную косую черту - PullRequest
26 голосов
/ 08 апреля 2011

Как мне заменить строку с обратной косой черты.

Строка источника ввода:

sSource = "http://www.example.com\/value";

В приведенной выше строке я хочу заменить "\/ "с" / ";

Ожидаемый выходной результат после замены:

sSource = "http://www.example.com/value";

Я получаю исходную строку от третьего лица, поэтому я могу контролироватьформат строки.

Это то, что я пробовал

Пробная версия 1:

sSource.replaceAll("\\", "/");

Исключение Неожиданная внутренняя ошибка рядом с индексом 1 \

Пробная версия 2:

 sSource.replaceAll("\\/", "/");

Не является исключением, но не выполняет необходимую замену.Ничего не делает.

Пробная версия 3:

 sVideoURL.replace("\\", "/"); 

Не исключение, но не выполняет необходимую замену.Ничего не делает.

Ответы [ 8 ]

40 голосов
/ 08 апреля 2011
sSource = sSource.replace("\\/", "/");
  • String является неизменным - каждый вызываемый вами метод не меняет своего состояния. Вместо этого он возвращает новый экземпляр, содержащий новое состояние. Таким образом, вы должны присвоить новое значение переменной (это может быть та же самая переменная)
  • replaceAll(..) использует регулярное выражение. Вам это не нужно.
23 голосов
/ 08 апреля 2011

Попробуйте replaceAll("\\\\", "") или replaceAll("\\\\/", "/").

Проблема здесь в том, что обратная косая черта - это (1) escape-символ в Java-Strings и (2) Escape-символ в регулярных выражениях - каждое из этих применений требует удвоения символа, фактически 4 \ в ряду.


Редактировать: Конечно, как сказал Божо, вам нужно что-то сделать с результатом (присвоить его какой-то переменной), а не выбрасывать. И в этом случае вариант без регулярных выражений лучше.

7 голосов
/ 08 апреля 2011
s.replaceAll ("\\\\", "");

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

Но

s = "http://www.example.com\\/value";

также нужны две обратные косые черты в источнике.

7 голосов
/ 08 апреля 2011

Попробуйте

   sSource = sSource.replaceAll("\\\\", "");

Редактировать: Хорошо, даже в stackoverflow есть экранирование обратной косой черты ... Вам нужно иметь четыре обратной косой черты в вашем аргументе replaceAll first String ...

Причина этого в том, что обратная косая черта считается экранирующим символом для специальных символов (например, \ n, например).
Кроме того, replaceAll first arg - это регулярное выражение, которое также использует обратную косую черту в качестве escape-последовательности.
Так что для регулярного выражения вам нужно передать 2 обратный слеш. Чтобы передать эти две обратные косые черты с помощью java-строки в replaceAll, необходимо также избежать обеих обратных косых черт.
Это заставляет вас иметь четыре обратных слеша для вашего выражения! Это красота регулярного выражения в Java;)

4 голосов
/ 07 августа 2014

Это заменит обратную косую черту на прямую косую черту в строке:

source = source.replace('\\','/');
2 голосов
/ 08 апреля 2011

Вы должны сделать

sSource.replaceAll("\\\\/", "/");

, потому что обратная косая черта должна быть экранирована дважды один для строки в источнике один в регулярном выражении

0 голосов
/ 01 марта 2017

Чтобы заменить обратную косую черту в определенном месте:

if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) {
    stringValue=stringValue.substring(0,location-1);
}
0 голосов
/ 15 октября 2014
 sSource = StringUtils.replace(sSource, "\\/", "/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...