entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Quitar fragmento de un string JAVA

Lo que estoy intentando es separar una cadena String de otra...pero no entiendo porque me da este error...

package GUI;
public class m {

    public static void main(String[] args) {
        String ruta = "C:\\Users\\PcPortatil\\Pictures\\";
        String username = System.getProperty("user.name");
        String delimitador = "C:\\Users\\" + username;
        String NuevaRuta = ruta.replaceAll(delimitador, "");
        System.out.println(NuevaRuta);
    }

}

Me da este error:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 3
C:\Users\PcPortatil
   ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.escape(Unknown Source)
    at java.util.regex.Pattern.atom(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at GUI.m.main(m.java:11)

1 Respuesta

3votos

MitsuGami Puntos8010
  1. Se utiliza \\ para escapar un backslash, ya que si pusieses solo \ el compilador lo interpretará como si lo que sigue a ese backslash fuese un carácter de escape.

    Entonces, String ruta = "C:\\Users\\PcPortatil\\Pictures\\"; pasa a ser: String ruta = "C:\Users\PcPortatil\Pictures\"; (1)

  2. Al hacer uso de replaceAll se usará (1) como patrón de búsqueda, por lo que se detecta backslashes simples y el compilador espera un carácter de escape que nunca llegal, lanzando una PaternSyntaxException.

Utiliza la constante File.separator el cual te devuelve el caracter de separación entre directorios de acuerdo al SO.

String ruta = "C:" + File.separator + "Users" + File.separator + "PcPortatil" + File.separator + "Pictures";
String userName = System.getProperty("user.name");
String delimitador = "C:" + File.separator + "Users" + File.separator + userName;
String nuevaRuta = ruta.replaceAll(delimitador, "");

0voto

Yesod comentado

Me sigue dando el mismo error...que raro... :)

0voto

MitsuGami comentado

Negativo. Lo he probado antes de escribir la respuesta y funcionó correctamente. Revisa bien.

0voto

Yesod comentado

He copiado y pegado lo que has puesto...¿Lo has puesto correctamente por aquí?

0voto

MitsuGami comentado

Así es, el código es idéntico. Mira:

0voto

Yesod comentado

enter image description here

He mirado y creo que puede ser porque estas usando Linux y la barra que se usa es / en vez de \

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta