由于java 8 String.chars()返回了一个IntStream,如果你想要一个字符流,我发现的最佳答案是通过铸造i ->(char)i,我想知道是否有人知道这是否适用于实际占用8字节的UTF-16字符?
根据你对正确定义的定义:不,它没有。
Java char
是一个 16 位 UTF-16 代码单元。任何比这长的东西都表示为两个char
(作为"代理对")。
String#length()
也是如此.它将返回char
数,因此您的"长字符"将计为二。
返回IntStream
的原因只是为了不需要引入CharStream
类。包含的数据仍将仅在 char
16 位范围内。
但是,除了 chars()
之外,还有.codePoints()
,它确实返回 32 位 Unicode 代码点(也作为IntStream
)。