Rumah >Java >javaTutorial >Bagaimana untuk Menyahlepaskan Literal Rentetan Java dengan Berkesan?

Bagaimana untuk Menyahlepaskan Literal Rentetan Java dengan Berkesan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-16 03:06:13108semak imbas

How to Effectively Unescape Java String Literals?

Bagaimanakah untuk Menyingkirkan Java String Literal dalam Java?

Masalah:

Di Java, anda mempunyai Java string literal yang memerlukan unescaping sebelum dihantar ke fungsi yang mengharapkan rentetan unescaped (cth., menukar n kepada baris baharu dan kepada single ).

Penyelesaian:

Walaupun Java tidak mempunyai fungsi terbina dalam untuk ini, terdapat pilihan yang tersedia:

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

Pustaka ini menyediakan kaedah unescapeJava(). Walau bagaimanapun, ia mempunyai had (cth., melupakan untuk null).

2. Fungsi Unescape Tersuai:

Fungsi tersuai boleh ditulis untuk menyelesaikan masalah, menangani had kaedah Commons Lang. Berikut ialah contoh penyelesaian tersuai:

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

Fungsi tersuai ini mengendalikan pelbagai jujukan melarikan diri, termasuk yang tidak disokong oleh kaedah Commons Lang.

Pertimbangan Tambahan:

  • Uji fungsi anda yang tidak dapat melarikan diri dengan pelbagai urutan melarikan diri untuk memastikan ketepatan.
  • Berhati-hati dengan aksara yang dilepaskan yang mungkin mempunyai makna istimewa dalam bahasa pengaturcaraan yang anda gunakan.

Atas ialah kandungan terperinci Bagaimana untuk Menyahlepaskan Literal Rentetan Java dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn