基础类库:StringBuffer、StringBuilder类

java.lang.StringBuffer
1.概述
如果对字符串进行拼接操作,每次拼接都会构造一个新的String对象,既费时,又浪费空间。而StringBuffer就可以解决这个问题。
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
2.StringBuffer与String的区别
前者字符长度和内容可变,后者不可变;
如果使用前者进行字符串的拼接,不会浪费太多资源
3.构造方法
StringBuffer()
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(int capacity)
构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
4.成员方法
添加功能:
public StringBuffer append(String str)
append方法可以将任意类型数据添加到字符串缓冲区里,并且返回缓冲区本身
public StringBuffer insert(int begin,String str)
insert方法在指定位置将任意类型的数据插入到字符串缓冲区里,并且返回缓冲区本身
删除功能:
public StringBuffer deleteCharAt(int index)
删除指定位置的字符,并返回缓冲区本身
public StringBuffer delete(int start,int end)
删除索引是start~(end-1)处的字符,并返回缓冲区本身(包左不包右)
替换功能:
public StringBuffer replace(int start,int end,String str)
将索引是start~(end-1)处的字符替换为字符串str,并返回缓冲区本身(包左不包右)
反转功能:
public StringBuffer reverse()
即从尾到头
截取功能:
String substring(int start)
截取索引为start到串尾的字符序列(包含start位置),并且返回该序列内容的字符串型
String substring(int start, int end)
截取索引为start到(end-1)的一段字符序列(包左不包右),并且返回该序列内容的字符串型
5.StringBuffer与String之间的互换
A.String转换为StringBuffer
a.通过构造方法:StringBuffer(String str)
B.StringBuffer换换为String
a.通过构造方法:
之前讲String类的构造方法,还有一个:String(StringBuffer buffer)
b.StringBuffer类的String toString()
6.有关StringBuffer的面试题:
StringBuffer与StringBuilder的区别:
几乎相同,二者都是可变字符序列。区别是StringBuffer是同步的,线程安全,效率比String高很多,但比StringBuilder低;
StringBuilder不保证同步,线程不安全,高效率。

package API_ordinary;

public class StringBufferDemo {

    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        //其中int capacity():返回当前容量(可理解为缓存区容量,无参构造时,初始容量是16)
        System.out.println(sb.length()+","+sb.capacity());
        //缓冲区的容量(字符数)为capacity,等于20
        StringBuffer sb2=new StringBuffer(20);
        System.out.println(sb2.length()+","+sb2.capacity());
        //下面缓存区的容量等于16+5=21,需要注意
        StringBuffer sb3=new StringBuffer("hello");
        System.out.println(sb3.length()+","+sb3.capacity());
        System.out.println(sb3);
        //添加功能
        //追加
        StringBuffer s=new StringBuffer();
        s.append("hello");
        s.append(5);
        s.append(false);
        s.append(3.1415926);
        System.out.println(s);
        //插入
        //从索引2的位置起(包含2)开始插入,相应字符后移动
        s.insert(2, "HE");
        System.out.println(s);
        //删除功能
        s.deleteCharAt(2);
        System.out.println(s);
        s.delete(0, 6);//包左不包右
        System.out.println(s);
        //替换功能
        s.replace(1, 6, "true");//包左不包右
        System.out.println(s);
        //反转功能
        System.out.println(s.reverse());
        //截取功能
        StringBuffer s2=new StringBuffer();
        s2.append("hello").append("world").append("java");
        System.out.println(s2);
        //演示:String substring(int start)
        String str=s2.substring(5);
        System.out.println(str);
        System.out.println(s2);//缓冲区本身没有变
        String str2=s2.substring(5,10);//包左不包右
        System.out.println(str2);
        //演示:StringBuffer与String的互换
        String str3="abc";
        StringBuffer sb4=new StringBuffer(str3);
        sb4.append(123).append("ABC");
        String str4=new String(sb4);
        String str5=sb4.toString();
        System.out.println(str4+" "+str5);
        //StringBuffer类练习
        //演示:将任意数组拼接成字符串
        int[] a=new int[]{11,33,22,44,55,77,66,88};
        StringBuffer buffer=new StringBuffer();
        for(int out:a)
        {
            buffer.append(out);
        }
        String str6=buffer.toString();
        System.out.println(str6);
        //演示:将字符串反转
        String str7="helloworld";
        StringBuffer buffer2=new StringBuffer(str7);
        str7=buffer2.reverse().toString();
        System.out.println(str7);
        //演示:判断是否是对称字符串
        str7="abcde";
        String str8="abcba";
        StringBuffer buffer3=new StringBuffer(str7);
        if(buffer3.reverse().toString().equals(str7))
            System.out.println(str7+"是对称字符串");
        else
            System.out.println(str7+"不是对称字符串");
        //清空字符串缓冲区(int start,int end)包左不包右
        buffer3.delete(0, buffer3.length());
        buffer3.append(str8);
        if(buffer3.reverse().toString().equals(str8))
            System.out.println(str8+"是对称字符串");
        else
            System.out.println(str8+"不是对称字符串");

    }

}

0,16
0,20
5,21
hello
hello5false3.1415926
heHEllo5false3.1415926
heEllo5false3.1415926
5false3.1415926
5true3.1415926
6295141.3eurt5
helloworldjava
worldjava
helloworldjava
world
abc123ABC abc123ABC
1133224455776688
dlrowolleh
abcde不是对称字符串
abcba是对称字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值