StringBuffer
定义
线程安全的可变字符序列, ⼀个类似于String的字符缓冲区, 我们可以将StringBuffer看作是⼀
个⾼级的String
StringBuffer和String的区别
String是⼀个不可变的字符序列
StringBuffer是⼀个可变的字符序列
构造⽅法
public StringBuffer():⽆参构造⽅法 默认容量是16
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
扩容公式: 原容量<< 1 + 2
常⽤⽅法
- 容量和⻓度
public int capacity() : 返回当前容量 理论值(不掌握)
public int length() : 返回⻓度(字符数) 实际值
-
添加
- public StringBuffer append(String str)
- 可以把任意类型数据添加到字符串缓冲区⾥⾯,并返回字符串缓冲区本身
- public StringBuffer insert(int offset,String str)
- 在指定位置把任意类型的数据插⼊到字符串缓冲区⾥⾯,并返回字符串缓冲区本身
- public StringBuffer append(String str)
-
删除
- public StringBuffer deleteCharAt(int index):
- 删除指定位置的字符,并返回本身
- public StringBuffer delete(int start,int end):
- 删除从指定位置开始指定位置结束的内容,并返回本身
- public StringBuffer deleteCharAt(int index):
-
替换和反转
-
public StringBuffer replace(int start,int end,String str)
- 从start开始到end⽤str替换
-
public StringBuffer reverse()
- 字符串反转
-
演示
import java.util.Arrays;
public class StringBufferDemo {
//Sting --不可变字符串 创建之后不可以改变,每次拼接实质上是创建一个新的对象
//StringBuffer-- 线程安全 可变字符串
public static void main(String[] args) {
//stringbuffer的构造方法 --- 可变? 字符数组的内容是可以改变 -- 长度的问题 扩容
//StringBuffer的默认容量/初始容量--16 无参构造方法
//也可以指定初始容量 -- 有参构造
/*
public StringBuffer() {
super(16); // 直接使用了父类的有参构造方法 value = new char[capacity];
}
*/
StringBuffer stringBuffer = new StringBuffer(); // 无参构造方法
int capacity = stringBuffer.capacity();//获取容量
System.out.println(capacity);
/*
public StringBuffer(int capacity) {
super(capacity); // 直接使用了父类的有参构造方法 value = new char[capacity];
}
*/
StringBuffer stringBuffer1 = new StringBuffer(32);
int capacity1 = stringBuffer1.capacity();
System.out.println(capacity1);
//第二个有参构造方法 -- 不是直接确定数组的长度,而是通过确定数组的内容来间接确定长度
StringBuffer stringBuffer2 = new StringBuffer("123456");
//int capacity2 = stringBuffer2.capacity();
//System.out.println(capacity2);
//获取的方法
// 1. 获取容量 -- 当前的stringBuffer一共可以放的字符的个数
int capacity2 = stringBuffer2.capacity();
System.out.println("stringBuffer2的容量是:" + capacity2);
//2. 获取长度 -- 当前的stringBuffer已经放的字符的个数
int length = stringBuffer2.length();
System.out.println("stringBuffer2的长度是:" + length);
//向stringbuffer的末尾添加数据 基本扩容方式:原容量<<1+2
StringBuffer buffer = stringBuffer.append("abcde");//16 5
System.out.println(buffer.capacity());
buffer = stringBuffer.append("abcde");//16 10
System.out.println(buffer.capacity());
buffer = stringBuffer.append("abcde");//16 15
System.out.println(buffer.capacity());
buffer = stringBuffer.append("abcde");//16 20 扩 34
System.out.println(buffer.capacity());
buffer = stringBuffer.append("abcde");//34 25
System.out.println(buffer.capacity());
buffer = stringBuffer.append("abcde");//34 30
System.out.println(buffer.capacity());
buffer = stringBuffer.append("abcde");//34 35 扩 70
System.out.println(buffer.capacity());
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = sb.append("123456789");
System.out.println(sb1.capacity());
sb1.append("123456789123456789123456789123456789123456789123456789");
System.out.println(sb1.capacity());
//在指定的位置插入数据
System.out.println(stringBuffer2.length());
StringBuffer insert = stringBuffer2.insert(0, "呵呵呵");
System.out.println(insert);
System.out.println(insert.length());
char[] chars = insert.toString().toCharArray();
System.out.println(Arrays.toString(chars));
insert = stringBuffer2.insert(3,"哈哈");
System.out.println(insert);
//删除数据
StringBuffer stringBuffer3 = insert.deleteCharAt(4);
System.out.println(stringBuffer3);
System.out.println(insert);
//删除指定范围的字符 开始的位置 结束的位置 --含头不含尾
StringBuffer delete = stringBuffer3.delete(1, 5);
System.out.println(delete);
//替换的方法 起始的位置 结束的位置 替换的字符串
StringBuffer replace = delete.replace(1, 3, "*");
System.out.println(replace);
//反转的方法
StringBuffer reverse = replace.reverse();
System.out.println(reverse);
}
}