StringBuffer(字符串缓冲区)
StringBuffer是一个容器,且长度可变,
可以直接操作多个数据类型,数组只能操作一种
最终结果为字符串
字符串的原理就是通过该类实现的
-----------------------------------------------
1.添加
两个主要的方法:
StringBuffer append()-->将指定数据作为参数添加到已有数据的结尾处
看main函数中定义了sb,然后定义了sb2 =sb.append(34);
但是,当我打印这两个数据时,它们的值却是相等的!!!,都是34
为什么呢?
按常理说sb里面应该什么都没有啊
这个问题用面盆理论来解释:
sb就是面盆,面盆里面加了面,还是面盆啊,加了水,也还是面盆啊...
---------------------------------------------------------------
sb.append("abc").append(true).append(34);
方法调用链,方法返回的是本类对象,还可以调用这个方法
------------------------------------------------------------
insert()-->append只能在字符串结尾处添加,而insert可以插入
sb.insert(index,数据);
--------------------------------------------------------------------
2.删除
上面append,insert都是添加;下面说删除
StringBuffer delete(start,end)-->删除的内容,包含start,不包含end
StringBuffer deleteCharAt(index)-->删除指定位置的字符
--------------------------------------------------------
初始化StringBuffer,删除1--3(包含1,不包含3)a0 b1 c2 d3 e4
即输出ade
用这个方法清空缓冲区
sb.delete( 0, sb.length() );
---------------------------------------------------------
删除指定位置上的某个字符
------------------------------------------------------------
3.获取
上面讲了增、删,下面讲查(获取)
char charAt(int index)
返回此序列中指定索引处的
char
值。int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引
int lastIndexOf(String str)
返回最后一次出现的指定子字符串在此字符串中的索引
String substring(int start, int end);
返回一个新的
String
,它包含此序列当前所包含的字符子序列。注:返回的类型是字符串类型的
-----------------------------------------------------------------
4.修改
修改原来字符串的内容
replace(int start, int end, String str)--包含首,不包含尾的原则,str为替换的内容
使用给定的字符替换此序列的子字符串中的字符。
-----------------------------------------------------------------
void setCahrAt(int index, char ch)替换某个位置的字符,
注:没有返回值,替换完就结束了
-------------------------------------------------------------
5.反转
StringBuffer reverse()
将abcde倒序打印
------------------------------------------------------------
6.getChars(开始,结尾,容器,容器开始存储的位置)
将缓冲区的指定数据,存储到指定数组中
看看,将1-4,即b,c,d存储到char数组(第二个位置开始存)
-----------------------------------------------------------------
StringBuilder
JDK 1.5以后出现的,和StringBuffer几乎一样
StringBuffer是线程同步的;StringBuilder是线程不同步的
如果你是单线程,那就用StringBuilder,这样不用判断锁,提高效率,
如果是多线程,为了保证安全性,就用StringBuffer
以后开发,建议使用StringBuilder
----------------------------------------------------------------------
java升级的3个原因:
1.提高效率
2.简化书写
3.提高安全性