Cadena reemplazar una barra invertida

¿Cómo puedo hacer una cadena de reemplazo de una barra invertida?

Cadena de fuente de entrada:

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

En la cadena anterior, quiero reemplazar “\ /” con un “/”;

Salida prevista después de reemplazar:

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

Obtengo Source String de un tercero, por lo tanto, tengo control sobre el formato de String.

Esto es lo que he intentado

Prueba 1:

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

Excepción Error interno inesperado cerca del índice 1 \

Prueba 2:

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

Sin excepción, pero no hace el reemplazo requerido. No hace nada.

Prueba 3:

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

Sin excepción, pero no hace el reemplazo requerido. No hace nada.

 sSource = sSource.replace("\\/", "/"); 
  • String es inmutable: cada método que invoque no cambia su estado. Devuelve una nueva instancia que contiene el nuevo estado en su lugar. Entonces debes asignar el nuevo valor a una variable (puede ser la misma variable)
  • replaceAll(..) usa regex. No necesitas eso.

Pruebe replaceAll("\\\\", "") o replaceAll("\\\\/", "/") .

El problema aquí es que una barra invertida es (1) un carácter de escape en Java-Strings, y (2) un Escape-Character en Expresiones regulares; cada uno de estos usos necesita doblar el carácter, en efecto necesitando 4 \ en la fila.


Editar: Por supuesto, como dijo Bozho, necesitas hacer algo con el resultado (asignarlo a alguna variable) y no descartarlo. Y en este caso, la variante no regex es mejor.

Tratar

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

Edit: Ok incluso en stackoverflow hay escape de barra invertida … Debes tener cuatro barras diagonales inversas en tu replaceAll primer argumento de cadena …

La razón de esto es porque la barra diagonal inversa se considera como un carácter de escape para caracteres especiales (como \ n, por ejemplo).
Además, replaceAll first arg es una expresión regular que también usa la barra diagonal inversa como secuencia de escape.
Entonces para la expresión regular necesitas pasar 2 barras invertidas. Para pasar esas dos barras invertidas por una Cadena java a ReplaceAll, también necesita escapar de ambas barras diagonales inversas.
¡Eso te lleva a tener cuatro barras invertidas para tu expresión! Esa es la belleza de la expresión regular en Java;)

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

Necesita enmascarar una barra diagonal inversa en su fuente, y para la expresión regular, necesita enmascararla nuevamente, por lo que para cada barra invertida necesita dos, que termina en 4.

Pero

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

necesita dos barras diagonales inversas en la fuente también.

Esto reemplazará a las barras invertidas con barras diagonales en la cadena:

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

tu tienes que hacer

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

porque el backshlash debería escaparse dos veces uno para string en source uno en expresión regular

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

Para reemplazar la barra invertida en una ubicación particular:

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