Heim >Java >javaLernprogramm >Wie entfesselt man Java-String-Literale effektiv?

Wie entfesselt man Java-String-Literale effektiv?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 03:06:13108Durchsuche

How to Effectively Unescape Java String Literals?

Wie entescape ich ein Java-String-Literal in Java?

Problem:

In Java gibt es Java-String-Literale die ein Demaskieren erfordern, bevor sie an Funktionen übergeben werden, die nicht maskierte Zeichenfolgen erwarten (z. B. Konvertieren von n in Newline und Single). ).

Lösung:

Während Java hierfür keine integrierte Funktion hat, stehen folgende Optionen zur Verfügung:

1. [Commons Lang StringEscapeUtils](https://commons.apache.org/proper/commons-lang/javadocs/api-3.12/org/apache/commons/lang3/StringEscapeUtils.html)**:

Diese Bibliothek stellt eine unescapeJava()-Methode bereit. Es gibt jedoch Einschränkungen (z. B. das Vergessen von Null).

2. Benutzerdefinierte Unescape-Funktion:

Eine benutzerdefinierte Funktion kann geschrieben werden, um das Problem zu lösen und die Einschränkungen der Commons-Lang-Methode zu beheben. Hier ist ein Beispiel einer benutzerdefinierten Lösung:

public static String unescapeJavaString(String oldstr) {
    // Initialize variables
    StringBuilder newstr = new StringBuilder(oldstr.length());
    boolean saw_backslash = false;

    for (int i = 0; i < oldstr.length(); i++) {
        int cp = oldstr.codePointAt(i);

        // Handle UTF-16 code units
        if (oldstr.codePointAt(i) > Character.MAX_VALUE) {
            i++;
        }

        // Process characters
        if (!saw_backslash) {
            if (cp == '\') {
                saw_backslash = true;
            } else {
                newstr.append(Character.toChars(cp));
            }
            continue;
        }

        // Handle backslash sequences
        if (cp == '\') {
            saw_backslash = false;
            newstr.append('\');
            newstr.append('\');
            continue;
        }

        // Handle specific escape sequences
        switch (cp) {
            case 'r':
                newstr.append('\r');
                break;
            case 'n':
                newstr.append('\n');
                break;
            case 'f':
                newstr.append('\f');
                break;
            // Handle other escape sequences as needed
            // ...
        }

        saw_backslash = false;
    }

    // Append any remaining characters
    if (saw_backslash) {
        newstr.append('\');
    }

    return newstr.toString();
}

Diese benutzerdefinierte Funktion verarbeitet verschiedene Escape-Sequenzen, einschließlich solcher, die von der Commons-Lang-Methode nicht unterstützt werden.

Zusätzliche Überlegungen:

  • Testen Sie Ihre Unescaping-Funktion mit einer Vielzahl von Escape-Sequenzen, um sicherzustellen Genauigkeit.
  • Seien Sie vorsichtig mit Escapezeichen, die in der von Ihnen verwendeten Programmiersprache möglicherweise eine besondere Bedeutung haben.

Das obige ist der detaillierte Inhalt vonWie entfesselt man Java-String-Literale effektiv?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn