[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF]
上面的行显示了非法字符范围异常。谁能帮帮我。
如果我直接在 Java 代码中使用上述行,它不会显示任何错误。
Pattern xmlInvalidChars = Pattern.compile("[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFDuD800uDC00-uDBFFuDFFF]");
但是,如果从配置 xml 文件中获取字符串并在 java 代码中使用,则会显示错误。
String chars = ConfigLoader.getInstance().getInvalidCharacters();
Pattern xmlInvalidChars = Pattern.compile(chars);
我还不能发表评论,所以我会发布作为答案。 在你的字符串中,你有松散的反斜杠 uD800uDC00-uDBFFuDFFF
,因此,它将u
视为和转义字符,但事实并非如此。 只需添加双反斜杠作为正则表达式的其余部分。
编辑:在编译模式之前,请尝试用双斜杠替换单斜杠。
chars = chars.replace("\","\\");
我在配置 xml 文件中使用了以下行。
[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFDuD800\uDC00-\uDBFFuDFFF]
也就是说,我使用了相反的情况。 我将单斜杠更改为双斜杠(\ 到 \(,将双斜杠更改为单斜杠(\ 到 (。它现在正在工作。