문제:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!