【发布时间】:2017-05-25 11:08:14
【问题描述】:
[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF]
以上行显示非法字符范围异常。谁能帮帮我。
如果我直接在 java 代码中使用上述行,它不会显示任何错误。
Pattern xmlInvalidChars = Pattern.compile("[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\uD800\uDC00-\uDBFF\uDFFF]");
但是如果从配置xml文件中获取字符串并在java代码中使用,它会显示错误。
String chars = ConfigLoader.getInstance().getInvalidCharacters();
Pattern xmlInvalidChars = Pattern.compile(chars);
【问题讨论】:
-
问题出在
\uDC00-\uDBFF,这个范围有问题。您需要与模式匹配什么?也许您需要删除连字符以删除错误范围?此外,您需要在 XML 中使用单个反斜杠。 -
正如@WiktorStribiżew 所说,参考en.wikipedia.org/wiki/UTF-8#Invalid_code_points