Java---StringBuffer类
基本介绍
java.lang.StringBuffer 代表可变的字符序列,可以对字符内容进行增删
很多方法与String相同,但StringBuffer是可变长度的
StringBuffer是一个容器

String VS StringBuffer
1)String 保存的是字符串常量,里面的值不能更改,每次 String 类的更新实际上就是更改地址,效率极低 // private final char value[];
2)StringBuffer 保存的是字符串变量,里面的值可以更改,每次StringBuffer 的更新实际上可以更新内容,不用每次更新地址,效率较高 // char[] value; // 这个放在堆、
package com.heima.Hello.StringBuffer_;public class StringBuffer01 {public static void main(String[] args) {// 1. StringBuffer 的直接父类 是 AbstractStringBuilder// 2. StringBuffer 实现了 Serializable,即StringBuffer的对象可以串行化// 3. 在父类中 AbstractStringBuilder 有属性 char[] value,不是final// 该 value 数组存放 字符串内容,引出存放在堆中的// 4, StringBuffer 是一个 final类,不能被继承// 5. 因为StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)// 不用每次都更换地址(即不是每次创建新对象),所以效率高于 StringStringBuffer stringBuffer = new StringBuffer("hello");}
}StringBuffer 的构造器
构造方法摘要
StringBuffer()
构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。
StringBuffer(CharSequence seq)
public java.lang.StringBuilder(CharSequence seq)构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符
StringBuffer(int capacity) // capacity[容量]
构造一个不带字符,但具有指定初始容量的字符串缓冲区,即对 char[] 大小进行指定
StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
String 和 StringBuffer相互转换
在开发中,我们经常需要将 String 和 StringBuffer 进行转换
package com.heima.Hello.StringBuffer_;public class StingAndStringBuffer {public static void main(String[] args) {// String -> StringBufferString str = "hello tom";// 方式1 使用构造器//注意:返回的才是StringBuffer对象,对 str 本身没有有影响StringBuffer stringBuffer1 = new StringBuffer(str);// 方式2 使用 append 方法StringBuffer stringBuffer2 = new StringBuffer();stringBuffer2 = stringBuffer2.append(str);// StringBuffer -> StringStringBuffer stringBuffer3 = new StringBuffer("东风快递,使命必达");// 方式1 使用 StringBuffer 提供的 toString 方法String s3 = stringBuffer3.toString();// 方式2 使用构造器来搞定String s4 = new String(stringBuffer3);}
}StringBuffer 类常见方法
1)增 append
package com.heima.Hello.StringBuffer_;public class StringBufferMethod01 {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);}
}2)删 delete(start,end)
package com.heima.Hello.StringBuffer_;public class StringBufferMethod01 {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello,张三丰赵敏100true10.5");// 删/** 删除索引为 >= start && <= end 处的字符* 解读: 删除 11~14 的字符 [11,14)*/s.delete(11,14);System.out.println(s); // "hello,张三丰赵敏true10.5"}
}3)改 replace(start , end , string) // 将 start --- end 间的内容替换掉,不含 end
package com.heima.Hello.StringBuffer_;public class StringBufferMethod01 {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello,张三丰赵敏100true10.5");// 改// 解读,使用 周芷若 替换 索引9~11的字符 [9,11)s.replace(9,11,"周芷若");System.out.println(s); // hello,张三丰周芷若100true10.5}
}4)查 indexOf // 查找字串在字符串第 1 次出现的索引,如果找不到,则返回 -1
package com.heima.Hello.StringBuffer_;public class StringBufferMethod01 {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello,张三丰赵敏周芷若true10.5");// 查System.out.println(s.indexOf("张三丰")); // 返回字符串第一次出现的索引System.out.println(s.indexOf("falase")); // 找不到则返回 -1 }
}5)插 insert
package com.heima.Hello.StringBuffer_;public class StringBufferMethod01 {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello,张三丰周芷若true10.5");// 插// 解读,在索引为9的位置插入字符串"赵敏",原来索引为9的内容自动后移s.insert(9,"赵敏");System.out.println(s);}
}6)获取长度 length
package com.heima.Hello.StringBuffer_;public class StringBufferMethod01 {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello,张三丰赵敏周芷若true10.5");// 长度// 返回字符串长度System.out.println(s.length()); // 22}
}StringBuffer 类课堂测试题
package com.heima.Hello.StringBuffer_;public class StringBufferExercose01 {public static void main(String[] args) {String str = null;StringBuffer sb1 = new StringBuffer();sb1.append(str); // 底层调用的是 AbstractStringBuilder 的 appendNullSystem.out.println(sb1.length()); // 4System.out.println(sb1); // null// 看下面的构造器,会抛出NullPointerExceptionStringBuffer sb2 = new StringBuffer(str); // 看底层源骂 super(str.length() + 16);System.out.println(sb2);}
}