StringBuffer类
在java中StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法与String相同,但StringBuffer是可变长度的
StringBuffer是一个容器
1.StringBuffer 的直接父类 是 AbstractStringBuilder
2.StringBuffer 实现了 Serializable,即StringBuffer的对象可以串行化
3.在父类中 AbstractStringBuilder 有属性 char[] value,不是final 该value 数组存放 字符串内容,因此存放在堆中的
4.StringBuffer 是一个final类,不能被继承
5.因为StringBuffer 字符内容时存在char[] value 中的,所以在变化(增加/删除)
不用每次都要更换地址(既不是每次创建新对象),所以效率高于String
StringBuffer stringBuffer = new StringBuffer(“hello”)
String 与 StringBuffer 对比
String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率低
StringBuffer 保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率高
StringBuffer的构造器
StringBuffer()
构造一个其中不带字符的字符串缓冲区,其初始内容为16个字符;
StringBuffer(CharSequence seq){
public java.lang.StringBuffer(CharSequence seq)构造一个字符缓冲区,它包含与指定的CharSequence相同的字符
}
StringBuffer(int capacity)//capacity[容器]
构造一个不带字符,但具有指定初始容量的字符缓冲区,即对char[]大小进行指定
StringBuffer(String str)
构造一个字符缓冲区,并将其内容初始化为指定的字符串内容
package com.ld.stringbuffer_;
public class StringBuffer02 {
public static void main(String[] args) {
//构造器的使用
//解析
//1.创建一个 大小为16的char[],用于存放字符内容
StringBuffer stringBuffer = new StringBuffer();
//2.通过构造器指定 char[] 大小
StringBuffer stringBuffer1 = new StringBuffer(100);
//3.通过给一个String 创建 StringBuffer;char[] 大小就是 str.length()+16
StringBuffer stringBuffer2 = new StringBuffer("hello");
}
}
String 和 StringBuffer相互转换
在开发中,经常需要将String 和StringBuffer进行转换,看看如何实现
package com.ld.stringbuffer_;
public class StringAddStringBuffer {
public static void main(String[] args) {
//String -->StringBuffer
String str="hello tom";
//方式1 使用构造器
//注意:返回的才是StringBuffer对象,对str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用的是append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1=stringBuffer1.append(str);
//StringBuffer -> String
StringBuffer stringBuffer2 = new StringBuffer("德玛洗衣啊");
//方式1 使用StringBuffer提供的 toString方法
String s= stringBuffer2.toString();
//方式2 使用构造器来解决
String s1 = new String(stringBuffer2);
}
}
StringBuffer s=new StringBuffer("hello");
//增
s.append(',');// "hello,"
s.append("张三丰");//"hello,赵敏"
s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
System.out.println(s);//"hello,张三丰赵敏100true10.5"
//删
/*
删除索引为>=start && ,end 处的字符
解析:
删除11 到 14 的字符[11,14)
* */
s.delete(11,14);
System.out.println(s);//"hello,张三丰赵敏true10.5"
//改
//使用 周芷若 替换 索引9-11的字符 [9-11)
s.replace(9,11,"周芷若");
System.out.println(s);//"hello,张三丰周芷若true10.5"
//查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
int indexOf =s.indexOf("张三丰");
System.out.println(indexOf);//6
//插入
//解析:在索引为9的位置插入 “赵敏”,原来索引为9的内容自动后移
s.insert(9,"赵敏");
System.out.println(s);//hello,张三丰赵敏周芷若true10.5
//长度
System.out.println(s.length());//22
System.out.println(s);