将Unicode字符串拆分成字符字符串列表

3
如何将包含代理对字符和普通字符的Unicode字符串拆分成List<String>字符列表?
String被要求用于存储由两个char组成的代理对字符)
1个回答

5

试试这个。

String s = "ac";
List<String> result = List.of(s.split("(?<=.)"));
for (String e : result)
    System.out.println(e + " : length=" + e.length());

输出:

 : length=2
a : length=1
 : length=2
c : length=1
 : length=2

代码点

或者,使用一串代码点整数。

List<String> result = 
    s
    .codePoints()                    // Produce a `IntStream` of code point numbers.
    .mapToObj(Character::toString)   // Produce a `String` containing one or two java chars for each code point in the stream.
    .collect(Collectors.toList());

在IdeOne.com上在线查看此代码运行

要捕获代码点,请使用以上代码的以下变体。

List<Integer> codePointNumbers = 
    s
    .codePoints()            
    .boxed()       
    .collect( Collectors.toList() ) ;

运行时:

codePointNumbers.toString(): [128522, 97, 128102, 99, 128522]


谢谢,我想使用存储代码点的 List<Integer> 更容易。 - cdalxndr
1
@cdalxndr,我强烈建议您专注于代码点整数来表示单个字符。在Java中,char类型已经过时,无法表示大多数Unicode字符。为了表示现代Unicode文本而摆弄char值是令人沮丧和不必要的。请查找添加到StringCharacter类中的几种面向代码点的方法。我在这个答案中添加了另一个代码示例,展示如何收集代码点整数。 - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接