Character.isLetter是否需要规范化文本?

use*_*762 9 java unicode

我有一个程序通过删除任何不是字母或数字的字符来过滤掉字符串.该计划支持大量语言,包括中文,俄语,阿拉伯语等.该计划如下:

StringBuilder strBuilder = new StringBuilder();

for (int i = 0; i < src.length(); i++) {
    int ch = src.codePointAt(i);
    if (Character.isLetterOrDigit(ch)) {
        strBuilder.appendCodePoint(ch);
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用codePointAt方法来支持通过高和低代理以UTF 32位表示的字符.在执行过滤之前,我需要知道每个字符串是否需要规范化?我指的是Normalizer.normalize在执行循环之前调用该方法.如果是,Normalizer.Form我应该使用哪个?

谢谢.

jta*_*orn 0

请注意,您用于迭代代码点的代码不太正确,我相信您想要:

for(int cp, i = 0; i < s.length(); i += Character.charCount(cp)) {
    cp = s.codePointAt(i);
    // Process cp...
}
Run Code Online (Sandbox Code Playgroud)

抱歉,但不知道您是否需要正常化。