StringBuffer类的概述
通过JDK提供的API, 查看StringBuffer类的说明
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer类的构造方法
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,不安全,所以速度更快。
A:StringBuffer的构造方法:
public StringBuffer():无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
B:StringBuffer的方法:
public int capacity():返回当前容量。理论值(不掌握)
public int length():返回长度(字符数)。 实际值
C:案例演示
构造方法和长度方法的使用
package com.hwh.stringbuffer;
public class Demo1_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println(sb.length());//0//容器中的字符个数,实际值
System.out.println(sb.capacity());//16//容器的初始容量,理论值
StringBuffer sb2 = new StringBuffer(10);
System.out.println(sb2.length());//0
System.out.println(sb2.capacity());//10
StringBuffer sb3 = new StringBuffer("hwh");
System.out.println(sb3.length());//3//实际字符的个数
System.out.println(sb3.capacity());//19//字符串的length + 初始容量
}
}
StringBuffer的添加功能
StringBuffer的添加功能
public StringBuffer append(String str):
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组
当调用添加的方法时,不会再重新创建对象,在不断向原缓冲区添加字符
package com.hwh.stringbuffer;
public class Demo2_StringBuffer {
public static void main(String[] args) {
demo1();
StringBuffer sb = new StringBuffer("1234");
sb.insert(3, "hwh");//在指定位置添加元素,如果没有指定位置的索引就会报索引越界异常
System.out.println(sb); //123hwh4
}
private static void demo1() {
StringBuffer sb = new StringBuffer();
System.out.println(sb.toString());//
StringBuffer sb2 = sb.append(true);
System.out.println(sb2.toString());//true
StringBuffer sb3 = sb.append("hwh");
System.out.println(sb3.toString());//truehwh
StringBuffer sb4 = sb.append(100);
System.out.println(sb4.toString());//truehwh100
System.out.println(sb.toString()); //truehwh100//StringBuffer类中重写了toString方法,显示的是对象中的属性值
System.out.println(sb2.toString()); //truehwh100
System.out.println(sb3.toString()); //truehwh100
System.out.println(sb4.toString()); //truehwh100
}
}
StringBuffer的删除功能
A:StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):
删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):
删除从指定位置开始指定位置结束的内容,并返回本身
package com.hwh.stringbuffer;
public class Demo3_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//sb.deleteCharAt(5);//当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException
sb.append("hanwenhao");
sb.deleteCharAt(4);//根据索引删除掉索引位置上对应的字符
System.out.println(sb); //hanwnhao
sb.delete(0, 2);//删除的时候是包含头,不包含尾
System.out.println(sb); //nwnhao
sb.delete(0, sb.length());//清空缓冲区
System.out.println(sb);
sb = new StringBuffer();//不要用这种方式清空缓冲区,原来的会变成垃圾,浪费内存
System.out.println(sb);
}
}
StringBuffer的替换和反转功能
A:StringBuffer的替换功能
public StringBuffer replace(int