StringBuffer类
一、 结构剖析
-
Java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。
-
很多方法与String相同,但StringBuffer是可变长度的。
-
StringBuffer是一个容器。
-
String VS StringBuffer
- String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。
private final char value[];
- StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高。
char[] value; //这个存放在堆里
- String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。
//StringBuffer类的细节:
public class StringBuffer01 {
public static void main(String[] args) {
//1. StringBuffer 的直接父类 是 AbstractStringBuilder
//2. StringBuffer 实现了 Serializable,即StringBuffer的对象可串行化
//3. 在父类 AbstractStringBuilder 中有属性 char value[] ,不是final
// 该 value数组 存放我们的字符串内容,是存放在堆中的而非常量池,value[]不是常量了
//4. StringBuffer 是一个final类,不能被继承
//5. 因为StringBuffer 字符内容是存在 char[] value ,所以在变化时(增加/删除)
// 不用每次都更换地址(即不是每次都创建新对象),所以效率高于 String(每次变化都会指向新的对象)
StringBuffer stringBuffer = new StringBuffer();
}
}
二、 StringBuffer转换
-
StringBuffer的构造器
StringBuffer()
构造一个没有字符的字符串缓冲区,初始容量为16个字符。 StringBuffer(CharSequence seq)
构造一个包含与指定的相同字符的字符串缓冲区 CharSequence
。StringBuffer(int capacity)
构造一个没有字符的字符串缓冲区和指定的初始容量。 StringBuffer(String str)
构造一个初始化为指定字符串内容的字符串缓冲区。 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[] value的大小就是 str.length + 16 StringBuffer hello = new StringBuffer("hello"); //4. 创建StringBuffer,包含与指定的CharSequence相同的字符。 // StringBuffer(CharSequence seq) } }
-
StringBuffer 和 String 之间的转换
-
String ——> StringBuffer:
方式1:使用构造器
方式2:使用 append方法
-
StringBuffer ——> String
方式1:使用StringBuffer 提供的 toString方法
方式2:使用构造器
public class StringAndStringBuffer { 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.append(str); //看 StringBuffer ——> String StringBuffer stringBuffer2 = new StringBuffer("你好!"); //方式1:使用StringBuffer 提供的 toString方法 String s = stringBuffer2.toString(); //方式2:使用构造器 String s2 = new String(stringBuffer2); } }
-
三、 StringBuffer的常见方法
- 增
append()
- 删
delete(start,end)
- 改
replace(start,end,string)
,将start~end之间的内容替换掉,不含end。 - 查
indexOf()
,查找子串在字符串第一次出现的索引,如果找不到返回 -1. - 插
insert()
- 获取长度
length()
public class StringBufferMethod {
public static void main(String[] args) {
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);
//删
/*
删除索引 >= 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());
System.out.println(s);
}
}