Java字符串
1、子串:
String s1=greeting.substring(2);//表示去掉从第0个开始的2个字符
String s2=greeting.substring(0, 3);//表示截取第0个到第3个字符
左图为程序片段,右图为运行结果:
2、拼接:
- 使用+拼接两个字符串。
- 如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态join方法:
String array1= String.join("/","人类","动物类","鸟类","鱼类");
左图为程序片段,右图为运行结果:
3、不可变字符
由于不能修改java中的字符,故将String类中的字符称为不可变字符
4、检测字符是否相等
1、检测两个字符串是否相等equal,
表达式:string1.equal(string2);
如果string1与string2相等返回true,否则返回false。可以是字符串变量,也可以是一个字符串实体,如:”hello”equal(“world”); 是符合条件的。
2、检测两个字符串相等,但是不区分大小写,可使用equalsIgnoreCase方法。
注:一定不能使用==检测字符串是否相等
下面是《java核心技术》里的片段:
5、空串和null串
空串””是长度为0的字符串。检测字符串长度:len=string1.length(); 空串有自己的长度,长度为0,内容为空。String这个变量还可以存放一个特殊的值null,这时候表示没有任何对象与该变量关联。
注:a.如果要检测一个字符串既不为0也不为空需要同时满足:string1!=null&&string.length()!=0;
b.如果一个字符为null,调用时会出错
6、码点与代码单元
先简单说明一下Unicode:(统一码、万国码、单一码)是计算机领域的一项业界标准,包括字符集、编码方案等。
UTF-16编码(16-bit Unicode Transformation Format):是Unicode的一个使用方式,Transformation Format即把Unicode转化为某种格式。
(1)码点数量:实际的字符个数,辅助字符算一个
(2)代码单元数量:string.length()计算的不是实际字符长度,这时候辅助字符算两个。
- char类型是一个采用UTF-16编码(16-bit Unicode Transformation Format)表示Unicode码点的代码单元。大多数的常用Unicode字符(u+000-u+FFFF)使用一个代码单元就可以表示,而辅助字符(u+10000-u+10FFFF)需要一对代码单元。一般代码单元与与码点的长度是一致的,但对于辅助字符,如:u+ID546,其代码单元长度为2,但是码点长度为1。
- length方法将返回采用UTF-16编码表示的给定字符所需的代码单元数量。
- 想要得到实际长度,即码点数量,可用codePointCount.
- 想要字符串中某个字符可用:String.charAt(n);
- 想要得到第n个码点
- 如果想要遍历一个字符串查看每个代码点可以使用下面的代码:
function void listCodePoint(String string){
int codePointNum = string.codePointCount(0,string.length() - 1);
}
下面是《java核心技术》里对码点与代码单元的解释:
7、String API
API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组历程的能力,而又无需访问源码,或理解内部工作机制的细节。
Java中的String类包含50多种方法,大多数有用。
《Java核心技术》P51
8、阅读联机API文档
String类中包含许多方法,而且,在标准库中有几千个类,方法数量惊人,要想记住所有类和方法是不可能的。因此,学会使用在线API文档十分重要,从中可以查阅到标准库中所有类和方法。API文档是JDK(开发工具包)的一部分,是HTML格式的。
如下图:Java在线API文档(自行百度即可找到)
9、构建字符串
- 由许多小段字符串构建一个字符串,首先建一个空的字符串构建器:
StringBuilder builder=new StringBuilder();
- 当每次需要添加一部分内容时,就调用append方法
builder.append(ch);//追加单个字符append a single character
builder.append(str);//追加单个字符串append a single string
- 在需要构建字符串时就toString方法,将可以得到一个String对象,其中包含了构建器中的字符序列
String completedString=builder.toString();
注:在JDK5.0中引入了StringBuilder类。这个类的前身是StringBuffer,其效率有些低,但允许采用多线程的方式添加或删除字符的操作。如果所有字符串在一个单线程中编辑(通常是这样),则应该用StringBuilder代替它。这两个类的API是相同的。
下面是API注释包含了StringBuilder类中的重要方法:《Java核心技术》P55