我无法编译这个:
String[][] UMLAUT_REPLACMENTS = {{"\u0022", """},{"\u0021", "!"}};
我尝试使用\\来转义特殊字符,但没有效果。
这是错误代码:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project opk-application-util: Compilation failure: Compilation failure:
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/util/SonderZeichenFilter.java:[50,41] '}' expected
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/ch/opk/util/SonderZeichenFilter.java:[50,45] ';' expected
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/ch/opk/util/SonderZeichenFilter.java:[50,46] illegal character: '#'
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/ch/opk/util/SonderZeichenFilter.java:[50,47] ';' expected
[ERROR] /C:/eplatform/git-repos/opk-backend/opk-application-util/src/main/java/opk/util/SonderZeichenFilter.java:[50,50] unclosed string literal
最佳答案
在 Java 中,Unicode 转义序列 ( \u<i>XXXX</i>
) 作为 pre-processing 的一部分进行处理和字符串文字 escape sequences 之前被处理。因此当编译器处理"\u0022"
时它实际上正在处理字符串文字 """
这是一个空字符串文字(两个双引号),后跟另一个字符串文字的左引号,因此会导致错误“未闭合的字符串文字”,因为代码中的双引号数量不均匀。
这是导致 Javadoc 格式错误的一个常见原因(当作者想按字面意思编写 \u<i>XXXX</i>
但生成的 HTML 却包含相应的 Unicode 字符),并且大多数 IDE 也会对此感到困惑(例如 \u0063lass MyClass {}
是有效的) Java 源代码;\u0063
= c
)。
在您的情况下,您可以使用特殊的转义序列 \"
写一个文字 "
。这也将提高可读性,因为并不是每个人都熟悉 Unicode 代码点 "
。同样\u0021
可以写成!
因为该字符在 Java 字符串中没有特殊含义。因此,您的代码可以这样编写:
String[][] UMLAUT_REPLACEMENTS = {{"\"", """},{"!", "!"}};
如果你想要文字 \u<i>XXXX</i>
在 Java 字符串中,您必须在反斜杠前面加上另一个 \
来转义反斜杠。 :"\\u<i>XXXX</i>"
关于java - 无法在 Java 字符串中保存 HTML 实体 - 非法字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63738972/