11
votes

Que signifient ces caractères spéciaux en Java?

Je regardais une partie du code JDK. J'ai trouvé ces personnages. Peut-être que quelqu'un pourrait m'expliquer quoi cela signifie-t-il?

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


3 Réponses :


2
votes

Eh bien, \ q et \ e avoir une signification spéciale dans Java expressions régulières ...

La plupart de cette méthode ne fonctionnent que sur le tracking Edge Cas de citant les marqueurs de devis \ q et \ e eux-mêmes.


0 commentaires

9
votes

Le moteur Java Regex Bloque une interprétation spéciale de tous les méta-caractères entre \ q et \ e . Par exemple, [nom] correspond à un seul caractère ( 'n' , 'a' , 'm' " , ou 'E' ), tandis que \ q [nom] \ e correspond à six caractères - '[' , 'n' , 'a' , 'm' , 'e' et ']' . Voir la section caractères spéciale de la Tutoriel Regex pour plus de détails .

Le procédé fait une expression régulière d'une chaîne prévue vraisemblablement externe (par exemple entrée par un utilisateur). Étant donné que la chaîne peut contenir des méta-caractères, la méthode renferme la chaîne entière dans \ q et \ e . Si la chaîne contient déjà un \ e , la méthode insère la fin de la citation, une correspondance de \ e et un début d'un nouveau devis pour chaque \ E qu'il trouve ..


0 commentaires

7
votes

\ q et \ e est exactement ce que motif.quote () fait, c'est-à-dire que retourne une chaîne de motif littéral pour la chaîne spécifiée.

Pour plus de détails, voir ce lien:

http: // docs. oracle.com/javase/1.5.0/docs/api/java/util/regex/pattern.html


0 commentaires