将UTF-16字符串拆分为单个字符/字符串

MAG*_*Gx2 3 java utf-16

我有一个看起来像这样的字符串,abc我想将它拆分为单个字符/字符串.

static List<String> split(String text ) {
    List<String> list = new ArrayList<>(text.length());
    for(int i = 0; i < text.length() ; i++) {
        list.add(text.substring(i, i + 1));
    }
    return list;
}

public static void main(String... args) {
    split("a\uD83D\uDC4Fb\uD83D\uDE42c")
            .forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

正如您可能已经注意到的那样,我得到了两个奇怪的角色:

a
?
?
b
?
?
c
Run Code Online (Sandbox Code Playgroud)

Kar*_*cki 5

根据Character和String API文档,您需要使用代码点来正确处理UTF多字节序列.

"abc".codePoints().mapToObj(Character::toChars).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

将输出

a

b

c
Run Code Online (Sandbox Code Playgroud)


Tom*_*ski 5

以下将完成这项工作:

List<String> split(String text) {
    return text.codePoints()
            .mapToObj(Character::toChars)
            .map(String::valueOf)
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)