9.6 StringBuffer类
- 参考书籍:Java面向对象程序设计(第二版)--耿祥义 张跃平编著
- StringBuffer对象的创建,StringBuffer类的常用方法
- StringBuffer对象的创建
String类创建的字符串对象是不可以修改的,也就是说,String字符串不能修改,删除或替换字符串中的某个字符,即String对象一旦创建,实体是不可以再发生变化的。
例如:
String s=new String(“我喜欢学习”);
s Ox12ABC----------我喜欢学习(实体)
注意:若变化,会另开空间,原来空间不变
StringBuffer类可以创建可修改的字符串序列。也就是说,该类对象的实体的内存空间可以自动改变大小,以便于存放一个可变的字符系列。
比如一个StringBuffer对象调用append方法可以追加字符序列
例如:
StringBuffer buffer=new StringBuffer(“我喜欢学习”);
那么对象s可调用append方法追加一个字符串序列,如下:
buffer.append(“数学”);
buffer Ox12ABC----------------------我喜欢学习数学(实体发生了变化)
注意:是在原来实体中发生变化
StringBuffer类有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三个构造方法
- 使用第一个无参数的构造方法创建对象,分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的容量自动地增加
StringBuffer对象可以通过length()方法获取实体中存放字符串序列的长度,通过capacity()方法获取当前实体的实际容量
- 第二个初始容量为参数size,也是会自动增加
- 初始容量为参数字符串s的长度额外再加16个字符,也是会自动增加
比如一个无参数的构造方法例子:
package p1;
public class p1 {
public static void main(String args[]) {
StringBuffer str=new StringBuffer();
str.append("大家好");
System.out.println(str.length()); //输出3
System.out.println(str.capacity()); //输出16
str.append("我们大家都很愿意学习java语言"); //追加16,即19个字符
System.out.println(str.length()); //输出19
System.out.println(str.capacity()); //输出34 34-16=18
}
}
注意:我根据多次实验发现好像有个规律
初始容量:16
当字符串序列是17时候,实际容量16+18=34
当字符串序列是35时候,实际容量16+18+18*2=70
当字符串序列是71时候,实际容量16+18+18*2+18*4=142
当字符串序列是143时候,实际容量16+18+18*2+18*4+18*8=286
。。。
- StringBuffer类的常用方法
- append方法
使用StringBuffer类的append方法可以将其他java类型数据转化为字符串后,再追加到StringBuffer对象中。
- StringBuffer append(String s)
将一个字符串对象追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用
- StringBuffer append(int n)
将一个int型数据转化为字符串对象后再追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用
- StringBuffer append(Object o)
将一个Object对象的字符串表示追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用
- 类似还有很多StringBuffer append(类型 n)
- public char charAt()和public void setCharAt(int n,char ch)
char charAt(int n)得到参数n指定的位置上的单个字符。当前对象实体中的字符串序列的第一个位置为0,第二个为1,以此类推。
n的值必须是非负的,并且小于当前对象实体中字符串序列的长度
setCharAt(int n,char ch)将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。n的值必须是非负的,并且小于实体中字符串序列的长度
3>StringBuffer insert(int index,String str)
StringBuffer对象使用insert方法将参数str指定的字符串插入到参数index指定的位置,并返回当前对象的引用
4>public StringBuffer reverse()
StringBuffer对象使用reverse()方法将该对象实体中的字符翻转,并返回当前对象的引用
5>StringBuffer delete(int startIndex,int endIndex)
delete(int startIndex,int endIndex)从当前StringBuffer对象实体的字符串中删除一个子字符串,并返回当前对象的引用
快速记忆(要删除的第一个字符下标,endIndex-1)
deleteCharAt(int index)方法删除当前StringBuffer对象实体的字符串中index位置处的一个字符
- StringBuffer replace(int startIndex,int endIndex,String str)
将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换,并返回当前StringBuffer对象的引用
快速记忆(替换的第一个字符下标,endIndex-1, 要被换成的字符串)
附加:可以用String类的构造方法String(StringBuffer bufferstring)创建一个字符串对象