如何将包含代理对字符和普通字符的Unicode字符串拆分成
(
List<String>
字符列表?(
String
被要求用于存储由两个char
组成的代理对字符)试试这个。
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>
更容易。 - cdalxndrchar
类型已经过时,无法表示大多数Unicode字符。为了表示现代Unicode文本而摆弄char
值是令人沮丧和不必要的。请查找添加到String
和Character
类中的几种面向代码点的方法。我在这个答案中添加了另一个代码示例,展示如何收集代码点整数。 - Basil Bourque