字符串的基本操作
1 String及常见API
1.1String是不可变对象:由于在实际应用中,我们可能会频繁的使用一个字符串,因而把字符串设置为不可变对象,这样可以最大程度的利用相同内容的字符串以减少系统资源开销。
1.2String常量池:是指对字符串进行优化时,当我们用字面量、常量初始化一个字符串常量,jvm会优先在一个字符串常量池中(一个jvm维护的内存区域,用来存储直接用字面量、常量直接常见的对象(就是说不能new))查找是否有这个对象是否存在,若存在,直接引用。若不存在,则在字符串常量池中直接创建,然后引用它。
1.3内存编码及长度:Java中每存储一个字符都用两个字节,采用Unicode编码,每个字符的长度都为1,(包括中文),如一个中文代表一个字符,占用两个字节,代表一个长度。如图下:
长度为10
1.4使用indexOf实现字符串中检索另一个字符串或字符的位置,如图下
由上图得,给出了使用indexOf的一些基本方法,当在字符串中检索到了所需字符串,返回第一个元素的下标,当没有
检索到所需字符串时,返回-1.
1.5使用substring获取字串:substring用于获得一个字符串的子字符串,方法有以下几种:
String substring(int begin,int end);指返回从下标begin开始,到下标end(不包括)结束的字符串
String substring(int begin)指从下标begin开始,到字符串结束的字符串
如图下:
有上图的,第一个从下标7开始,到字符串结束,因而输出结果为www.orcale.com
第二个从下标11开始,到下标17(不包括17)结束,因而输出结果为:orcale
1.6 trim指将字符串两边的空白给去掉,并将去除的字符串返还给我们
由上图可知:我们可以通过trim()方法去除字符串两边的字符
1.7 charAt:charAt()方法返回字符串指定位置的字符,用法如下:
char charAt(int index)//只用来返回字符串指定位置的字符,index 代表指定位置的字符。如图下
由上图说明返回字符串中的每个字符
1.8startWith和endWith:用来检测一个字符串是否以指定开头或结尾,返回值为Boolean类型,如图下:
由上图得,当满足条件时,返回true
当不满足条件时,返回false
1.9大小写转换:指将字符串中的英文字母转换为大小写的形式,如图下:
由上图的,输出的结果为:
我喜欢JAVA
我喜欢java
1.10valueOf:指将其它类型转换为字符串类型,如图下
2 StringBuilder及其API
2.1StringBuilder封装可变字符串,对象创建后可以通过调用方法来改变其封装的字符序列
其构造方法为:public StringBuilder();
public StringBuilder(String str);
2.2StringBuilder的常用方法如图下:
2.3StringBuilder:StringBuilder的方法返回值均为StringBuilder类型,这些方法的返回语句均为:return this
由于改变字符序列后又改变又返回该对象的引用,因此可以通过如下简洁方式:
2.4append方法:指将可变字符串追加字符串,如图下:
由上述代码可知:append是指将sb的末尾追加元素
2.5 insert:是指将指定位置添加字符串,如图下:
由上面代码可知,是将"php"(字符串)添加到下标为9的位置
2.6 delete删除指定位置的字符串,如图下:
上图sb的输出为:javacppc#php
2.7 replace:是指将指定的字符串添加到添加带指定位置,如图下
2.8 reverse:将指定的字符串反转,如图下:
2.9StringBuilder总结:StringBuilder是可变字符串,字符串的内容计算建议采用StringBuilder实现,这样性能会好一些
例如:字符串的连接其实是用StringBuilder实现:如图下
StringBuffer和StringBuilder的区别
StringBuffer:是线程的安全的,同步处理的,性能稍慢
StringBuilder:是非线程的,并发处理的,性能稍快