检测到无效 XML 个字符

Detect non valid XML characters

关于这个问题:removing invalid XML characters from a string in java,在@McDowell 的回复中 he/she 说删除无效 XML 字符的方法是:

String xml10pattern = "[^"
                + "\u0009\r\n" // #x9 | #xA | #xD 
                + "\u0020-\uD7FF" // [#x20-#xD7FF]
                + "\uE000-\uFFFD" // [#xE000-#xFFFD] 
                + "\ud800\udc00-\udbff\udfff" // [#x10000-#x10FFFF]
                + "]";

然后:

replaceAll(xml10pattern, "");

嗯,我有两个问题:

我真的必须检测或过滤这种字符,但我不太确定该怎么做。

顺便说一句,这必须在 JDK 1.5 上工作(因此,不允许使用像 \x{h...h} 这样的表达式)

非常感谢。

======更新======

我想检测 String str 是否包含此类无效字符的方法是:

if (!str.replaceAll(pattern, "").equals(str)) { 
    // Contains non XML valid characters. 
}

非常欢迎任何其他建议 ;)

1) 它双向工作,\u0009 是 java 转义序列,\u0009 是正则表达式转义序列

2) Java 字符串是 UTF-16 编码的,U+10000 是用 2 个 16 位字符编码的 \ud800\udc00,参见字符 API Unicode 字符表示