基本介绍

1、StringBuffer类是对String类的增强,其代表了可变字符序列,可以对字符串的内容进行增删。

2、很多方法和String是相同的,但是StringBuffer是可变长度的。

3、StringBuffer是一个容器。

4、类结构图

buffer java文件读取 java buffer类_开发语言

 

1)StringBuffer的直接父类,是AbstractStringBuffer;

2)StringBuffer实现了Serializable,即可序列化;

3)在父类中,AbstractStringBuilder有属性char[ ] value,不是final类型。,该value字符串存放字符串内容,因此存放在堆中,

4)StringBuffer是一个final类,不能被继承。

5)因为StringBuffer内容存储在char value[]中,所以每次的增加删除都是在堆中进行修改,不用每次创建地址,不是每次都创建新的对象。

String和StringBuffer的对比:

1、String保存的是字符串常量,里面的值不能修改,每次String的修改都是对地址的修改,效率较低。保存在private final char value[];

2、StringBuffer保存的是字符串变量,里面的值可以被修改,每次StringBuffer的更新实际上就是内容的更新,不用每次都修改地址。StringBuffer里的char[] value的字符数组存放在堆里。

StringBuffer构造器

buffer java文件读取 java buffer类_buffer java文件读取_02

 

String和StringBuffer相互转换

buffer java文件读取 java buffer类_开发语言_03

 

StringBuffer常用方法:

buffer java文件读取 java buffer类_字符串_04

 注意:append参数也可以是字符串

public class Study {
	public String toString() {//重写Object类中toString()方法
		return getClass().getName();
	}
	public static void main(String[] args) {
		StringBuffer s1=new StringBuffer("abcd1234!?,;");
		StringBuffer s2=new StringBuffer("987654321987654");
		StringBuffer s3=new StringBuffer("987654321");
		System.out.println("↓↓↓StringBuffer类的一些常用方法如下↓↓↓");
		System.out.println("-----------------------------------------------------");
		System.out.println("字符串s1的长度为:" + s1.length());//返回字符串的实际长度
		System.out.println("-----------------------------------------------------");
		System.out.println("字符串s1所占容器的大小为:" + s1.capacity());//返回字符串所占容器的总大小
		System.out.println("-----------------------------------------------------");
		System.out.println("获取字符串s1中第2个位置的字符:" + s1.charAt(2));
		System.out.println("-----------------------------------------------------");
		System.out.println("子字符串'654'第一次出现在字符串s2中的索引为:" + s2.indexOf("654"));
		System.out.println("从指定的索引6开始搜索,返回子字符串'654'第一次出现在字符串s2中的索引:" + s2.indexOf("654",6));
		System.out.println("-----------------------------------------------------");
		System.out.println("子字符串'987'最后一次出现在字符串s2中的索引为:" + s2.lastIndexOf("987"));
		System.out.println("从指定的索引5开始反向搜索,返回字符串'87'在字符串s2中最后一次出现的索引:" + s2.lastIndexOf("87",5));
		System.out.println("-----------------------------------------------------");
		s1.append('x');//在字符串s1的末尾添加字符'c'
		s1.append("Java");//在字符串s1的末尾添加字符串"Java"
		System.out.println("修改后的字符串s1为:" + s1);
		System.out.println("-----------------------------------------------------");
		s1.insert(4,"abcd");//在第4个位置插入字符串"abcd"
		System.out.println("修改后的字符串s1为:" + s1);
		System.out.println("-----------------------------------------------------");
		s1.deleteCharAt(1);//删除字符串s1中第一个位置的字符
		s1.delete(2,5);//删除字符串s1中第2到第4个位置的字符
		System.out.println("修改后的字符串s1为:" + s1);
		System.out.println("-----------------------------------------------------");
		s1.replace(4,8,"5678");//将字符串s1中第4到第7个位置的字符串修改为"5678"
		System.out.println("修改后的字符串s1为:" + s1);
		System.out.println("-----------------------------------------------------");
		s1.setCharAt(1,'b');//将字符串s1中第一个位置的字符修改为'b'
		System.out.println("修改后的字符串s1为:" + s1);
		System.out.println("-----------------------------------------------------");
		s2.reverse();//将字符串s2反转
		System.out.println("修改后的字符串s2为:" + s2);
		System.out.println("-----------------------------------------------------");
		System.out.println("截取字符串s1从第4个位置开始到结尾:" + s1.substring(4));
		System.out.println("-----------------------------------------------------");
		System.out.println("截取字符串s1从第4个位置开始到第7个位置结尾:" + s1.substring(4,8));
		System.out.println("-----------------------------------------------------");
		System.out.println("获取s1的变量类型:" + s1.getClass().getName());
		System.out.println("将对象信息转化为字符串:" + s2.toString());
	}
}