StringBuffer类

概述

线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。StringBuffer类对象像一个存储字符串的容器
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题

构造方法

public StringBuffer()
无参构造方法

//创建一个字符串缓冲区对象
StringBuffer sb=new StringBuffer();

public StringBuffer(int capacity)
指定容量的字符串缓冲区对象

//字符串缓冲区默认的容量为16,我们也可以指定长度,这个长度不能过长
StringBuffer sb = new StringBuffer(10);

public StringBuffer(String str)
指定字符串内容的字符串缓冲区对象

//字符串缓冲区对象在创建时就已经存储了字符串
//如果缓冲区的字符串超出了默认容积或者指定的容积,缓冲区会自动进行扩容
//如果初始化时指定了字符串的内容,那么缓冲区的容积就是16+指定字符串的长度
//该字符串缓冲区的容量为19
StringBuffer sb = new StringBuffer("abc");

public int capacity()
返回当前容量
public int length()
返回长度(字符数)

StringBuffer sb = new StringBuffer("abcde");
int num1=sb.capacity();		//21
int num2=sb.length();		//5
StringBuffer类的添加方法

public StringBuffer append(String str)
将字符串添加到字符串缓冲区里面,并返回字符串缓冲区本身。
此处只是以添加字符串为例,StringBuffer对象中可添加多种数据类型数据,具体可查文档

public class Demo {
    public static void main(String[] args) {
		StringBuffer sb = new StringBuffer();
		//需要注意的是,返回的是字符串缓冲区本身。
		//即不需要定义新的StringBuffer对象来存储返回的对象,字符串已经存储进sb对象中
		sb.append("abc");
		System.out.println(sb);
		//因为返回的是StringBuffer类对象,所以我们可以再次调用append方法
		sb.append("def").append(123);
		System.out.println(sb);
	}
}
/*
运行结果:
abc
abcdef123
*/

public StringBuffer insert(int offset,String str)
在指定位置把字符串插入到字符串缓冲区里面,并返回字符串缓冲区本身
此处只是以添加字符串为例,StringBuffer对象中可插入多种数据类型数据,具体可查文档

public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc123");
        sb.insert(3,"def");
        System.out.println(sb);
    }
}
/*
运行结果:
abcdef123
*/
StringBuffer的删除方法

public StringBuffer deleteCharAt(int index)
删除指定位置的字符,并返回本身

public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc123");
        sb.deleteCharAt(2);
        System.out.println(sb);
    }
}
/*
运行结果:
ab123
*/

public StringBuffer delete(int start,int end)
删除从指定位置开始到指定位置结束的内容,并返回本身。包含起始索引,不包含结束索引

public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc123");
        sb.delete(1,4);
        System.out.println(sb);
    }
}
/*
运行结果:
a23
*/
StringBuffer的替换和反转功能

public StringBuffer replace(int start,int end,String str)
从start位置开始到end位置结束用字符串str替换,并返回本身

public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc123");
        sb.replace(3,6,"defg");
        System.out.println(sb);
    }
}
/*
运行结果:
abcdefg
*/

public StringBuffer reverse()
将字符串缓冲区中的字符串反转,返回其本身

public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc123");
        sb.reverse();
        System.out.println(sb);
    }
}
/*
运行结果:
321cba
*/
StringBuffer的截取方法

public String substring(int start)
从指定位置截取到末尾
public String substring(int start,int end)
截取从指定位置开始到结束位置的字符串,包括开始位置,不包括结束位置

public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abc123");
        String s1=sb.substring(3);
        String s2=sb.substring(0,3);
        System.out.println(s1);
        System.out.println(s2);
    }
}
/*
运行结果:
123
abc
*/
StringBuffer和String的相互转换

String转换为StringBuffer

//方式1:通过构造方法。
String str="abc";
StringBuffer sb=new StringBuffer(str);
//方式2:通过append()方法
String str="abc";
StringBuffer sb=new StringBuffer();
sb.append(str);

StringBuffer转换为String

//方式1:通过subString方法
StringBuffer sb = new StringBuffer("abc123");
String s=sb.substring(3);
//方式2:通过构造方法
StringBuffer sb=new StringBuffer("abc");
String s=new String(sb);
//方式3:通过toString方法
StringBuffer sb=new StringBuffer("abc");
String s=sb.toString();

StringBuffer和StringBuilder的区别:
StringBuilder相较于StringBuffer具有速度优势,因为它没有通过synchronized进行判断,所以StringBuilder效率高
但是也正是因为如此,StringBuilder的方法不是线程安全的
所以在只有主线程的情况下,推荐使用StringBuilder类,当程序中出现多条线程时,推荐使用StringBuffer类

你可能感兴趣的:(StringBuffer类)