Wie entescape ich ein Java-String-Literal in Java?
Das Problem
Es entsteht die Notwendigkeit, String-Literale aus dem Java-Quellcode zu extrahieren und zu übergeben zu einer Funktion, die eine einfache Zeichenfolge akzeptiert. Das Aufheben der Escapezeichenfolge für das String-Literal ist von entscheidender Bedeutung, d. h. die Konvertierung von Zeichen wie n und \ und anderen in ihre vorgesehene Form.
Verfügbare Funktionen für das Aufheben der Escapezeichenfolge Strings
- org.apache.commons.lang.StringEscapeUtils.unescapeJava()
Diese Funktion weist jedoch mehrere Einschränkungen auf:
- Ignoriert die Darstellung von Nullzeichen ( )
- Keine oktalen Escapezeichen verarbeiten
- Kann von Java-Regexes akzeptierte Escapezeichen (z. B. a, e, cX) nicht verarbeiten
- Es fehlt die Unterstützung für Unicode-Codepunkte und UTF-16-Zeichenverarbeitung
Benutzerdefinierte Lösung: unescape_perl_string()
Eine benutzerdefinierte Funktion, unescape_perl_string(), wird als Alternative vorgeschlagen:
-
Verarbeitet alle Java-String-Escapes: r, n, f, t, (unter anderem).
-
Unterstützt Oktal Escapezeichen: , N, NN und andere.
-
Enthält zusätzliche Escapezeichen: ?cX (Steuerzeichen), ?x{XXX} (Hexa-Escapezeichen mit geschweiften Klammern).
-
Parst Java-Regex-Escapes: [IDIOT JAVA PREPROCESSOR]uXXXX.
Implementierungsdetails
Die Funktion unescape_perl_string():
- Durchläuft die Eingabezeichenfolge und verarbeitet Escape-Sequenzen basierend auf dem folgenden Zeichen .
- Zum Beispiel wird r in einen Wagenrücklauf umgewandelt, n in a Zeilenumbruch.
- Steuerzeichen werden unterstützt, wobei cX das Ergebnis der logischen XOR-Verknüpfung des Codepunkts des Zeichens mit „@“ darstellt.
- Hexadezimale Escapezeichen xXX und x{XXX} werden ordnungsgemäß entschlüsselt.
- Unicode-Codepunkte werden erkannt und in ihre Zeichendarstellungen umgewandelt.
- Unvollendete oder ungültige Escapezeichen werden als Fehler gekennzeichnet und gemeldet.
Das obige ist der detaillierte Inhalt vonWie kann ich Java-String-Literale richtig entescapen und alle Escape-Sequenzen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!