一、基本介绍
1、java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删
2、很多方法与 String 相同,但是 StringBuffer 是可变长度
3、StringBuffer 是一个容器
String VS StringBuffer
1、String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
2、StringBuffer 保存的是字符串常量,里面的值可以更改,每次 StringBuffer 的更新实际上可以更新内容,不用更新地址,效率较高 char[ ] value 存放在堆中
public class StringBuffer01 {
public static void main(String[] args) {
//1.StringBuffer 的直接父类是 AbstractStringBuffer
//2.StringBuffer 实现了 Serializable 即StringBuffer的对象可以串行化
//3.在父类中 AbstractStringBuffer 有属性 char[] value,不是 final
// 该 value 数组存放字符串内容 存放在堆中的
//4.StringBuffer 是一个 final 类,不能被继承
//5.因为 StringBuffer 字符串是存放在 char[] value 中,所以在变化时(增加/删除)
// 不用每次都更换地址(即不是每次都创建新的对象),所以效率高于 String
StringBuffer stringBuffer = new StringBuffer();
}
}
二、StringBuffer构造器
1、StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符
2、StringBuffer(CharSequence seq):构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符
3、StringBuffer(int capacity):构造一个不带字符,但具有指定初始容量的字符串缓冲区,即对 char[ ] 大小进行指定
4、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[] 大小就是str.length() + 16
StringBuffer hello = new StringBuffer("hello");
}
}
三、String和StringBuffer相互转换
在开发中,我们经常需要将 String 和 StringBuffer 进行转换
public class StringAndStringBuffer {
public static void main(String[] args) {
//String -> StringBuffer
String str = "hello";
//方式1 使用构造器
//返回的才是StringBuffer对象,对str本身没有任何影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
//StringBuffer -> String
StringBuffer zs = new StringBuffer("张三");
//方式1 toString方法
String s = zs.toString();
//方式2 使用构造器
String s1 = new String(zs);
}
}
四、StringBuffer类常用方法
1、append:增
2、delete(start, end):删
3、replace(start, end, string):改 将start --- end 间的内容替换掉,不含end
4、indexOf:查 查找子串在字符串第一次出现的索引,如果找不到返回-1
5、insert:插
6、length:获取长度
public class StringBufferMethod {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');
s.append("张三");
s.append("李四").append(100).append(true).append(10.9);
System.out.println(s);//hello,张三李四100true10.9
//删
//删除索引为 >=start && <end 处的字符
//删除11-14的字符
s.delete(11, 14);
System.out.println(s);//hello,张三李四1rue10.9
//改
//使用 老六 替换 索引8 - 10的字符 8包含,10不包含 [8,10)
s.replace(8, 10, "老六");
System.out.println(s);//hello,张三老六1rue10.9
//查找
//查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
int indexOf = s.indexOf("老六");
System.out.println(indexOf);//8
//插
//在索引为8的位置插入 李四,原来索引为8的内容自动后移
s.insert(8, "李四");
System.out.println(s);//hello,张三李四老六1rue10.9
//长度
System.out.println(s.length());//20
}
}
五、入门练习
1.
2、输入商品名称和商品价格,要求价格的小数点前面每三位用逗号隔开,再输出
import java.util.Scanner;
public class StringBufferExercise {
public static void main(String[] args) {
//输入商品名称和商品价格,要求价格的小数点前面每三位用逗号隔开,再输出
Scanner scanner = new Scanner(System.in);
System.out.print("请输入商品名:");
String name = scanner.next();
System.out.print("请输入商品价格:");
String money = scanner.next();
StringBuffer s = new StringBuffer(money);
//找到小数点的索引,然后在该位置的前3位插入,即可
for (int i = s.lastIndexOf(".") - 3; i > 0 ; i -= 3) {
s = s.insert(i, ",");
}
System.out.println("商品名\t商品价格\n" + name + "\t\t" + s);
}
}