ad

阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_3.6.5 空串与 Null串

admin 202 2023-10-25

【摘要】 本书摘自《Java核心技术》一书中第3章,第6节,作者是来自美国的凯·S.霍斯特曼(Cay S.Horstmann),由林琪、苏钰涵等译。

3.6.5 空串与 Null串

阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_3.6.5 空串与 Null串

空串""是长度为0的字符串。可以调用以下代码检查一个字符串是否为空: if (str.length()==θ)

if (str,equals(""))

空串是一个Java对象,有自己的串长度(0)和内容(空)。不过, String变量还可以存 放一个特殊的值,名为 null, 表示目前没有任何对象与该变量关联(关于null的更多信息请 参见第4章)。要检查一个字符串是否为null, 要使用以下条件:

if (str == null)

有时要检查一个字符串既不是null也不是空串,这种情况下就需要使用以下条件: if (str != null 8& str.length()!=θ)

首先要检查str不为null。在第4章会看到,如果在一个null值上调用方法,会出现错误。

3.6.6 码点与代码单元

Java字符串由char值序列组成。从3.3.3节已经看到, char数据类型是一个采用UTF-16 编码表示Unicode码点的代码单元。最常用的Unicode字符使用一个代码单元就可以表示, 而辅助字符需要一对代码单元表示。

length方法将返回采用UTF-16 编码表示给定字符串所需要的代码单元数量。例如:

String greeting ="Hello";

int n = greeting.length();// is 5

要想得到实际的长度,即码点数量,可以调用:

int cpCount = greeting.codePointCount(0, greeting.length());

调用s.charAt(n)将返回位置n 的代码单元, n介于θ~ s.length()-1之间。例如:

char first = greeting.charAt(0);// first is 'H'

char last = greeting.charAt(4);// last is 'o'

要想得到第 i个码点,应该使用下列语句

int index = greeting.offsetByCodepoints(θ, i);

int cp = greeting.codepointAt(index);

为什么会对代码单元如此大惊小怪?请考虑以下语句:

⑩ is the set of octonions.

使用UTF-16 编码表示字符① (U+1D546)需要两个代码单元。调用

char ch = sentence.charAt(1)

返回的不是一个空格,而是①的第二个代码单元。为了避免这个问题,不要使用char类型。

这太底层了。

如果想要遍历一个字符串,并且依次查看每一个码点,可以使用下列语句:

int cp = sentence.codepointAt(i);

if (Character.isSupplementaryCodepoint(cp))i += 2;

else i++;

可以使用下列语句实现反向遍历:

i-;

if(Character.isSurrogate(sentence.charAt(i)))i-;

int cp = sentence.codepointAt(i);

显然,这很麻烦。更容易的办法是使用 codepoints方法,它会生成一个int值的“流”, 每个 int值对应一个码点。(流将在卷Ⅱ的第2章中讨论。)可以将它转换为一个数组(见3.10 节),再完成遍历。

int[] codePoints = str.codepoints().toArray();

反之,要把一个码点数组转换为一个字符串,可以使用构造器(我们将在第4章详细讨 论构造器和 new操作符)。

String str = new String(codepoints,θ, codepoints.length);

3.6.7 String API

Java中 的String类包含了50多个方法。令人惊讶的是它们绝大多数都很有用,可以想见 使用的频率非常高。下面的API 注释汇总了一部分最常用的方法。

本书中给出的API 注释可以帮助你理解 Java应用编程接口 (API)。 每一个 API 的注释 都以类名开始,如 java.lang.String。(java.lang 包名的重要性将在第4章给出解释。)类名之后 是一个或多个方法的名字、解释和参数描述。

在这里, 一般不列出某个类的所有方法,而是选择一些最常用的方法,并以简洁的方式 给予描述。完整的方法列表请参看联机文档(请参看3.6.8节)。

这里还会列出所介绍的类的版本号。如果某个方法是在这个版本之后添加的,就会给出 一个单独的版本号。

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

上一篇:阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_4.2 使用预定义类
下一篇:阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_3.3.4 Unicode 和 char类型
相关文章

 发表评论

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

×