1.StringBuffer概念
StringBuffer是字符串缓冲区,是一个容器。
2.StringBuffer的特点
1.长度是可变化的。
2.可以字节操作多个数据类型。
3.最终会通过toString方法变成字符串。
3.StringBuffer的方法
3.1、存储
StringBuffer append():将指定的数据作为参数添加到已有的数据
可以看到除short,byte外,append方法支持大多数类型。
StringBuffer insert(index,str):可以将数据插入到指定index位置。
insert方法支持同append方法。
3.2、删除
StringBuffer delete(start,end):删除缓冲区中的数据,前闭后开区间
StringBuffer deleteCharAt():删除指定位置的字符。
3.3、获取
char charAt(int index):返回此序列中指定索引处的 char
值。
int indexOf(String str):返回第一次出现的指定子字符串在该字符串中的索引。
int lastIndexOf(String str): 返回最右边出现的指定子字符串在此字符串中的索引。
int length():返回长度(字符数)。
String substring(int start,int end): 返回一个新的 String
,它包含此序列当前所包含的字符子序列。
需要注意的是,获取返回的不再是StringBuffer容器,所以获取方法不可以串联着写。
3.4、修改
StringBuffer replace(int start,int end,String str)
void setCharAt(int index,char ch)
3.5、反转
StringBuffer reverse()
3.6、
将缓冲区中指定数据存储到指定的字符数组中
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
传值变量解析:StringBuffer获取开始位,结束位,要存到的字符数组,从字符数组的指定角标号开始
特别:由于有很多方法返回类型是StringBuffer,所以可以串联着写,例如:
sBuffer.append("abc").append(false).append(123).insert(3, 141).replace(2,7,"true").reverse();
4.StringBuffer的代码示例
以下是上文全部方法代码示例:
public class StringBufferTest {
public static void main(String[] args) {
bufferAdd();
bufferDel();
bufferUpd();
getCharDemo();
}
public static void bufferAdd(){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("abc").append(false).append(123);
sBuffer.insert(3, 141);
sop(sBuffer.toString());
}
public static void bufferDel(){
StringBuffer sBuffer = new StringBuffer("My name is Jarry!");
sBuffer.delete(2, 5);
sBuffer.deleteCharAt(2);
//sBuffer.delete(0, sBuffer.length());
sop(sBuffer.toString());
//sop("删掉了");
}
public static void bufferUpd(){
StringBuffer sBuffer = new StringBuffer("Hello Java!");
sBuffer.replace(2,7,"true");
sBuffer.reverse();
sop(sBuffer.toString());
}
public static void getCharDemo(){
StringBuffer sBuffer = new StringBuffer("abcdefghi");
char [] chs = new char[sBuffer.length()];
sBuffer.getChars(3, 7, chs, 2);
for(int i = 0;i<chs.length;i++){
sop("chs["+i+"]"+chs[i]+";");
}
}
public static void sop(String str){
System.out.println(str);
}
}
关于使用测试:建议自己手写或直接COPY到EditPlus中然后一步一步加注释看运行效果。
这是以上的代码运行效果:
5.StringBuilder的概念
JDK1.5版本之后出现了StringBuilder。
一个可变的字符序列。此类提供一个与StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer
要快。
6.StringBuilder与StringBuffer的异同
异:
StringBuilder是线程同步
StringBuilder是线程不同步
将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 Stringbuilder
同:
StringBuilde的方法与StringBuffer是相同的。
7.扩展:JDK升级的三个因素
1.提高效率
2.简化书写
3.提高安全性