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:
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!