Java | indexof()方法 | Java核心技术卷Ⅰ(第12版) 第三章 P48页3.6.3 | 学习经验

发布时间:2024年01月07日

一、关于码点和代码单元的简单理解

? ? 在书的前面部分我们已经看过了UnicodeUTF-16的相关介绍,简单的来说Unicode就像是一本字典,这本字典中的内容就是一个个符号和对应的数字1码点),他没有编码的功能。而UTF-16是一种编码规则,他会根据Unicode 这本字典中的数字1来产生对应的数字2,这一步操作的目的是因为经过这样的转换数字2数字1方便了某些事情,比如平台之间软件移植计算机计算等。

? ? 说完了他们连个之间的关系再来说说数字1数字2之间的不同。Unicode这本字典只有17页,这17页中第1页是叫做“基本多语言平面”,而剩余的16页就都是一些偏僻字符,他们统一叫做辅助字符。在数字2的逻辑中我们用16位的二进制来表示字典中第一页的字符(基本多语言平面),这16位组成代码单元,而剩余的16页我们用代码单元来表示,有人可能会有疑问不会发生冲突么?答案是不会,因为在16位表示基本多语言平面中有部分范围是没有表示字符的,这部分我们叫做替代区域,而使用这个替代区域中的值两两组合就可以表示剩下16页的字符了(具体如何实现请自行查找资料,以上只是简单描述,为了让大家理解方便)。

总结:

码? ? ? ?点:一一对应

代码单元:一一对应 + 两两组合

?二、indexof()方法的相关内容

? ?这里对indexof()这个方法具体的功能不做论述了,有书的朋友可以翻到P50页或者阅读这个网页中的内容Java API文档

? ?接下来展示代码,能更方便的结合书理解这个方法的用处。

代码:

public static void main(String[] args){
        String sentence = "\uD835\uDD46 is";                              //这个字符串一共用4个字符,四个码点,五个代码单元。第一个字符请看下方链接
        int cp0 = sentence.codePointAt(0);
        int cp1 = sentence.codePointAt(1);
        int cp3 = sentence.codePointAt(3);
        System.out.println("字符串:" + sentence);
        System.out.println("字符串长度:" + sentence.length());             //length()方法得到5
        System.out.println("第一个代码单元的序号:" + cp0);
        System.out.println("第二个代码单元的序号:" + cp1);
        System.out.println("第四个代码序号:" + cp3);                        //codePointAt()方法得到的是从一开始算第四个表示的字符的序号,及i
        System.out.println("120134第一次出现的位置:" + sentence.indexOf(120134));
        System.out.println("56646第一次出现的位置:" + sentence.indexOf(56646));
        System.out.println("105第一次出现的位置:" + sentence.indexOf(105));
    }

运行结果:?

字符串:𝕆 is
字符串长度:5
第一个代码单元的序号:120134
第二个代码单元的序号:56646
第四个代码序号:105
120134第一次出现的位置:0
56646第一次出现的位置:1
105第一次出现的位置:3

三、链接补充?

? ?第一个字符介绍(‘\uD835\uDD46’):𝕆符号信息

? ?length()方法介绍:length()方法介绍

? ?Unicode code units介绍:上面length方法页面中的链接(看完上面的连接后不要拉下,有助于理解)。

? ?码点和代码单元的介绍:csdn内关于码点和代码单元的介绍(结合上一个链接看)。

? ?codePointAt()方法介绍:codePointAt()方法介绍

文章来源:https://blog.csdn.net/m0_70779503/article/details/135430260
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。