Comment extraire un littéral de chaîne Java en Java ?
Le problème
Il est nécessaire d'extraire les littéraux de chaîne du code source Java et de les transmettre à une fonction qui accepte une chaîne simple. Il est crucial de supprimer l'échappement de la chaîne littérale, ce qui signifie convertir des caractères tels que n et \, entre autres, vers leurs formes prévues.
Fonctions disponibles pour l'échappement Strings
- org.apache.commons.lang.StringEscapeUtils.unescapeJava()
Cependant, cette fonction présente plusieurs limitations :
- Ignore la représentation des caractères nuls ( )
- Ne gère pas échappements octaux
- Ne parvient pas à gérer les échappements acceptés par les expressions rationnelles Java (par exemple, a, e, cX)
- Ne prend pas en charge les points de code Unicode et la gestion des caractères UTF-16
Solution personnalisée : unescape_perl_string()
Une fonction personnalisée, unescape_perl_string(), est proposée comme alternative :
-
Gère tous les échappements de chaînes Java : r, n, f, t, (entre autres).
- Prend en charge les échappements octaux : , N, NN et autres.
-
Comprend des échappements supplémentaires : ?cX (caractères de contrôle), ?x{XXX} (échappements hexa avec accolades).
-
Analyse les échappements d'expressions régulières Java : [IDIOT JAVA PREPROCESSOR]uXXXX.
Détails d'implémentation
La fonction unescape_perl_string() :
- Parcourt la chaîne d'entrée, en gérant les séquences d'échappement basées sur le caractère suivant .
- Par exemple, r est converti en retour chariot, n en nouvelle ligne.
- Les caractères de contrôle sont pris en charge, cX représentant le résultat du XOR logique du point de code du caractère avec '@'.
- Les échappements hexadécimaux xXX et x{XXX} sont correctement déchiffrés.
- Les points de code Unicode sont reconnus et convertis en leurs représentations de caractères.
- Échappements inachevés ou invalides sont signalés et signalés comme des erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!