如果我使用Java 8的String.codePoints来获取int codePoints数组,那么数组的长度是字符数吗?

给定Java中的String stringstring.codePoints().toArray().length是否根据人们会发现有意义的实际字符反映String的长度? 换句话说,它是否平滑转义字符和其他编码工件?

编辑 “人”我的意思是“程序员”,因为我想大多数程序员都会看到\r\n作为两个字符, ESC作为一个字符等等。但现在我看到,即使重音标记被雾化,所以它也没有无所谓

没有。

例如:


现在有争议的是,其中一些可能是“人类会发现有意义的实际角色” ……但总体答案仍然是否定的。


你澄清如下:

通过“人类”我的意思是“程序员”,因为我想大多数程序员都会看到\ r \ n作为两个字符……

它比这更复杂。 我是程序员,对我而言,它取决于上下文\r\n是否有意义。 如果我正在阅读README文件,我的大脑会将空白区域中的差异视为没有语义重要性。 但是,如果我正在编写解析器,我的代码会考虑空格…取决于它要解析的语言。

只需检查CharSequence的Javadoc以获取codePoints()方法:

返回此序列中的代码点值流。 序列中遇到的任何代理对都被组合,就好像通过Character.toCodePoint一样,结果传递给流。 任何其他代码单元(包括普通BMP字符,未配对代理和未定义代码单元)都将零扩展为int值,然后传递给流。 https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html#codePoints–

String类中与代码相关的一个点可以理解代码点是什么:

String(int [] codePoints,int offset,int count)分配一个新的String,该String包含Unicode代码点数组参数的子数组中的字符。 https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

代码点是表示Unicode代码点的int( https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#unicode ),因此所有字符都包含在非人类中可读。

String object.codePoints()返回Java 8.On中要调用toArray方法的字符流,因此它将以单独的方式处理每个字符并返回字符数。