Строка заменить обратную косую черту

как я могу сделать замену строки обратной косой черты.

Строка Входного Источника:

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

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

ожидаемый выход после замены:

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

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

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

суд 1:

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

исключение Непредвиденная внутренняя ошибка вблизи индекса 1

испытание 2:

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

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

Trial 3:

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

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

8 ответов


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

попробовать replaceAll("\\", "") или replaceAll("\\/", "/").

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


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


попробовать

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

Edit: Ok даже в stackoverflow есть обратный Слэш escape... Вам нужно иметь четыре обратных косых черты в аргументе replaceAll first String...

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


s.replaceAll ("\\", "");

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

но

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

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


это заменит обратные косые черты прямыми косыми чертами в строке:

source = source.replace('\','/');

вам нужно

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

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


 sSource = StringUtils.replace(sSource, "\/", "/")

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

if ((stringValue.contains("\"))&&(stringValue.indexOf("\", location-1)==(location-1))) {
    stringValue=stringValue.substring(0,location-1);
}