first especiales codigo caracteres all java string replace replaceall

especiales - replace() en java



Cadena reemplazar una barra invertida (8)

¿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.


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

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


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); }


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 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;)


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, "///", "/")


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.


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.