[^ \ 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);
答案 0 :(得分:1)
我还没有发表评论,所以我会发帖作为答案。在你的字符串中你有松散的反斜杠\uD800\uDC00-\uDBFF\uDFFF
,因此,它将\u
视为并转义字符,但事实并非如此。只需在正则表达式的其余部分添加双反斜杠。
编辑:在编译模式之前,尝试用双斜杠替换单斜杠。
chars = chars.replace("\\","\\\\");
答案 1 :(得分:0)
我在配置xml文件中使用了以下行。
[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\uD800\\uDC00-\\uDBFF\uDFFF]
这是我使用相反的情况。我将单斜杠更改为双斜杠(\ to \)并将双斜杠更改为单斜杠(\ to)。它现在正在运作。