2012-08-13 34 views
7

Estaba viendo parte del código jdk. Encontré estos personajes. ¿Podría alguien explicarme qué significan estos?¿Qué significan estos caracteres especiales en Java?

public static String quote(String s) { 
    int slashEIndex = s.indexOf("\\E");  // What does this mean. Is this a special char in java. if so what does this do. 
    if (slashEIndex == -1) 
     return "\\Q" + s + "\\E";   

    StringBuilder sb = new StringBuilder(s.length() * 2); 
    sb.append("\\Q"); 
    slashEIndex = 0; 
    int current = 0; 
    while ((slashEIndex = s.indexOf("\\E", current)) != -1) { 
     sb.append(s.substring(current, slashEIndex)); 
     current = slashEIndex + 2; 
     sb.append("\\E\\\\E\\Q"); 
    } 
    sb.append(s.substring(current, s.length())); 
    sb.append("\\E"); 
    return sb.toString(); 
} 

Desde el ejemplo de código anterior yo era capaz de averiguar lo que está sucediendo como en el método encuentra las ocurrencias de \ y los convierte a \ E y \ Q. ¿Podría alguien explicar por qué ese es el caso?

Para más contexto sobre este método, que estaba buscando en el método Pattern.quote() de JDK 1.6

+0

Este código aparece a ser [sacan directamente de fuentes de Java] (http://www.docjar.com/html/api/java /util/regex/Pattern.java.html) ('Pattern.java', líneas 1276..1293). – dasblinkenlight

+0

Sí, es de las fuentes jdk Pattern.java – JourneyMan

Respuesta

2

Bueno, \Q y \E tienen un significado especial en Java regular expressions ...

La mayor parte de Este método solo está trabajando en el complicado caso de citar los marcadores de cotización \Q y \E.

4

El motor Java regex bloquea la interpretación especial de todos los metacaracteres entre \Q y \E. Por ejemplo, [name] coincide con un solo carácter ('n', 'a', 'm' o 'e'), mientras que \Q[name]\E partidos seis caracteres - '[', 'n', 'a', 'm', 'e', y ']'. Consulte la sección Caracteres especiales del regex tutorial para obtener más detalles.

El método hace una expresión regular de una cadena que presumiblemente se proporciona externamente (por ejemplo, ingresada por un usuario). Dado que la cadena puede contener metacaracteres, el método encierra toda la cadena en \Q y \E. Si la cadena contiene ya un \E, el método inserta al final de la cita, un partido de \E, y el comienzo de una nueva cotización para cada \E que encuentra ..

Cuestiones relacionadas