《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)

网友投稿 292 2022-09-23

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)

3.5.6 枚举类型

enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE}

固定取值可以使用枚举变量,如代码所示,具体的大小可以选择 SMALL/MEDIUM/LARGE/EXTRA_LARGE。使用时:Size s = Size.SMALL;

3.6 字符串

字符串是由Unicode组成的序列,使用双引号将字符串的内容括起来。例子:

3.6.1 切割与拼接

3.6.2 不可变字符串

不可变类:无法通过外部类创建对象,修改对象成员变量;无法通过克隆类,修改对象成员变量。

String 类型特性:修改、拼接效率低,复制效率高。原因作者认为实际使用中,很少需要进行字符串切割和拼接。共享、复制的效率更重要。

字符串比较:== 比较同一个对象,equals比较相同值。

3.6.3 代码点和代码单元

这一块在基本书中看到过,但说实话,除了"charAt",其他生产从来没用到过,大概总结一下吧。

这一段写起来意外的久。首先想到,假设生产中要使用码点,那一定是要把一部分拿出来做匹配。码点要遍历,但是怎么取出来呢?我打印个整型有什么用?难道是直接用char?

恭喜我,答错了。码点本来就是多字符,用单字符怎么可能打印出来,抱着深深的疑惑,查了很多资料,可能太过生僻的原因,大家都没有做过多研究,我自己翻了翻代码,找到一个疑似:Character.getName(codePoint),但是打印出的东西,不太对劲。

数学双击大写字母O,应该是这个符号的名称。 但是这玩意似乎没用o(╥﹏╥)o。裂开。于是,重新翻看代码点相关的API,发现有个Character.charCount(cp),居然可以求出码点的长度,那咱直接substring就好了吧。

public class Main { public static void main(String[] args) { String greeting = "Hello"; int n = greeting.length();//unicode字符长度 //第一个字母 char first = greeting.charAt(0);//第一个字母 char last = greeting.charAt(4);//最后一个字母 String complex = "Hello \uD835\uDD46 ,Nice to meet you!"; System.out.println(complex); int cpCount = complex.codePointCount(0,complex.length());//码点长度 int offset = 0; for(int i = 0; i < cpCount; i++){ int index = complex.offsetByCodePoints(0,i); int cp = complex.codePointAt(index); int len = Character.charCount(cp); //疑惑怎么打印,各种资料找不到,后面翻源码发现有个输出,非常的冗余 //System.out.println(Character.getName(cp)); //切字符串,暂时只想到这个笨办法 System.out.print(complex.substring(offset,offset+len)); //因为会对应多个字符,单char打印会出错误的结果// System.out.print((char)cp); offset+=len; } }}

成功打出来!额外小知识,发现一篇有趣的文章,讲述了中文占几个字节,建议去了解一下:​​邻桌问我一个汉字占几个字节,我头也不抬回答两个,结果被打脸​​

3.6.4 字符串常用API

就写一些我用过的

名称

含义

个人评价

char charAt (int index)

某个位置的字符。

挺有用的,在需要做字符串截取的时候很有用,自己charAt拼接,比substring效率高。可做一些边界处理。

boolean endsWith(String suffix)

判断字符串是否以某个字符串结尾

一般。后缀匹配用的比较少,开头匹配用的多。

boolean equals(Object other)

判断两个字符串是否相等。

最常用的,没有之一。

int index0f(String str)

判断某个子串首次在当前字符串出现的位置。

还行,用的不多。

int lastIndex0f(String str)

子串,最后一次出现的位置。

还行,用的不多。

int length( )

获得字符串长度

很常用。与charAt联用经常有奇效。

boolean startsWith(String prefix)

判断字符串是否以某个字符串开头

挺有用的。

String substring(int beginIndex)

从某个索引开始,切割字符串

一般,不如两个index通用性强

String substring(int beginIndex, int endIndex)

切割字符串,从哪里开始,从哪里结束

很有用,substring(beginIndex,s.length())可以用来替代上面的substring(beginIndex)

String toLowerCase( )

字符串所有字符转小写

很有用,签名之类的用。

String toUpperCase( )

字符串所有字符转大写

很有用,签名之类的用。

String trim( )

去除前后空格

没用,ascii码有两种空格,只能去一种,去了个寂寞。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:蔡鄂生:互联网金融公司的发展要遵循金融的基本规律!
下一篇:RTSP/Onvif摄像机web直播遇到的时间戳问题导致的卡顿解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~