问题:
在 Java 中,你有 Java 字符串文字在传递给需要非转义字符串的函数之前需要进行非转义(例如,将 n 转换为换行符并转换为
解决方案:
虽然 Java 缺乏这方面的内置函数,但有可用的选项:
1. [Commons Lang StringEscapeUtils](https://commons.apache.org/proper/commons-lang/javadocs/api-3.12/org/apache/commons/lang3/StringEscapeUtils.html)**:
这个库提供了 unescapeJava() 方法。然而,它有局限性(例如,忘记 null)。
2.自定义Unescape函数:
可以编写自定义函数来解决问题,解决Commons Lang方法的局限性。以下是自定义解决方案的示例:
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(); }
此自定义函数处理各种转义序列,包括 Commons Lang 方法不支持的转义序列。
其他注意事项:
以上是如何有效地取消转义 Java 字符串文字?的详细内容。更多信息请关注PHP中文网其他相关文章!