Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.codePointCount()函数是如何工作的_Java_String - Fatal编程技术网

Java String.codePointCount()函数是如何工作的

Java String.codePointCount()函数是如何工作的,java,string,Java,String,假设我有这个例子 public static void main(String[] args) { System.out.println("This".codePointCount(0, 4)); } 输出为4 如果不是4,而是3,输出将是3 基本上产量是 0-3或通常为|第一索引-第二索引| 我不知道它是怎么工作的 你能举一个输出不同的例子吗 |第一索引-第二索引| 谢谢Java使用UTF-16作为其内部字符和字符串表示。在UTF-16中,单个Unicode字符由一个或多个

假设我有这个例子

    public static void main(String[] args) {
    System.out.println("This".codePointCount(0, 4));

}
输出为4 如果不是4,而是3,输出将是3 基本上产量是

0-3或通常为|第一索引-第二索引|

我不知道它是怎么工作的 你能举一个输出不同的例子吗

|第一索引-第二索引|


谢谢

Java使用UTF-16作为其内部字符和字符串表示。在UTF-16中,单个Unicode字符由一个或多个16位代码点表示

字符的数量并不总是与代码点的数量相同

见:

编辑 相反,单个Unicode代码点可以由多个16位字符组成…

来自javadoc:

返回此字符串指定文本范围内的Unicode码点数。文本范围从指定的beginIndex开始,扩展到索引endIndex-1处的字符。因此,文本范围的长度(以字符为单位)是endIndex beginIndex。文本范围内的未配对代理项每个都计为一个代码点

Java使用Unicode表示文本(字符)。Unicode给每个字符一个称为“代码点”的数字。有不同的方式将这些数字写入字节,java使用“UTF-16”(每个字符2个字节)。不幸的是,2字节的字符太多。比65535多得多

为了解决这个问题,UTF-16使用4个字节(2对2)作为非常大的数字的代码点。这些被称为代理项对

令人恼火的是,java会让人感到困惑,因为它将4字节字符视为2个字符


示例(credits@Pshemo):
“您为什么不阅读它的java文档?不理解java文档您知道什么是代码点,而不是字符、字节或图形?(否?)这是一种高级的Unicode方法。如果您对Unicode的细节感兴趣,请告诉我们您目前的知识水平。如果不感兴趣,请不要担心——您在日常Java代码中不需要这种方法。@JaroslawPawlak我必须承认,在阅读了javadoc之后,我不清楚这个函数除了告诉您之外还有什么作用这4-0=4。javadoc似乎没有很好地解释这个方法。@M.Prokhorov Perhapse..但同样,你不知道你不知道的东西。最近,SO似乎对人们非常咄咄逼人,因为他们不知道自己问题的答案/