java基础之StringBuffer类

本文详细介绍了Java中的StringBuffer类,包括其与String的区别、构造方法、添加、删除、替换、反转和截取等功能,并提供了示例代码。此外,还讨论了StringBuffer与数组以及String之间的转换和互操作,以及与StringBuilder的区别。着重强调了StringBuffer的线程安全性及其在多线程环境下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一:概述

二:StringBuffer和String的区别?

三:StringBuffer的构造方法

四:StringBuffer类的成员方法

1:添加功能

2:删除功能

3:替换功能

4:反转功能

5:截取功能

五: String和StringBuffer的相互转换

1:String到StringBuffer

2:StringBuffer -- String

六:String,StringBuffer,StringBuilder的区别

七:StringBuffer和数组的区别

八:注意

一:概述

StringBuffer是线程安全的可变字符序列,字符串缓冲区就像一个String ,但可以修改。

在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

简单记忆:它就是一个线程安全的可变字符串

是Java.lang包下的不用导包

二:StringBuffer和String的区别?

1、StringBuffer的长度和内容都是可变的,String的都不可变

2、StringBuffer可以提前给出一个缓冲区,可以进行字符串的拼接,而不会重新开辟新的空间

String,每创建新的字符串都会开辟新的空间

3:StringBuffer是线程安全的。

三:StringBuffer的构造方法

StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。重写了toString方法

StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。(有内容时等于没内容时容量加内容长度)

StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。、

package protice4;
public class Test1{
    public static void main(String[] args) {
        //构造一个没有字符的字符串缓冲区,初始容量为16个字符
        StringBuffer stringBuffer = new StringBuffer();
        //构造一个没有字符的字符串缓冲区和指定的初始容量
        StringBuffer stringBuffer1 = new StringBuffer(20);
        //构造一个初始化为指定字符串内容的字符串缓冲区
        StringBuffer stringBuffer2 = new StringBuffer("HelloWorld");
        //求他们的容量用capacity方法
        System.out.println(stringBuffer.capacity());
        System.out.println(stringBuffer1.capacity());
        System.out.println(stringBuffer2.capacity());
        //求他们的长度用length方法
        System.out.println(stringBuffer.length());
        System.out.println(stringBuffer1.length());
        System.out.println(stringBuffer2.length());
    }
}

注意:public int capacity() 返回当前容量。

容量是新插入字符可用的存储量,超过此值将进行分配。(如果自定义容量那输出容量就是初始化容量加自定义容量)

public int length() 返回长度(字符数)。

四:StringBuffer类的成员方法

1:添加功能

(1)public StringBuffer append(String str)

可以把任意类型的数据添加到字符串缓冲区中

返回的是当前字符串缓冲区本身

(2)public StringBuffer insert(int offset,String str)

相当于public StringBuffer insert(int index,String str)

在指定的索引上,插入字符串

package protice4;

public class Test {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        StringBuffer s1 = stringBuffer.append("HelloWorld");//添加一个字符串
        System.out.println(s1); //输出
        StringBuffer s2 = s1.append('!'); //添加一个字符
        System.out.println(s2); //输出
        StringBuffer s3 = s2.insert(5, ',');//在偏移量(索引)为5的位置插入一个字符
        System.out.println(s3); //输出
        StringBuffer s4 = s3.insert(6, "java");//在偏移量(索引)为6的位置插入一个字符串
        System.out.println(s4); //输出

    }
}

 注意:append可以添加其他类型的数据。例如:int,float等

insert也可以在指定索引位置插入其他类型数据。

2:删除功能

(1)public StringBuffer deleteCharAt(int index)删除char在这个序列中的指定位置。

返回的内容是本身

(2)public StringBuffer delete(int start,int end)

 删除此序列的子字符串中的字符。

 子串开始于指定start并延伸到字符索引end - 1 ,

或如果没有这样的字符存在的序列的结束。 如果start等于end ,则不作任何更改

package protice4;

public class Test3 {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("Hello World!");//利用有参构造传入一个字符串
        System.out.println(s);//输出s
        StringBuffer s1 = s.deleteCharAt(5);//删除索引为5的字符
        System.out.println(s1);//输出s1
        StringBuffer s3 = s1.delete(5, 10);
        System.out.println(s3);//输出
        
    }
}

3:替换功能

(1)public StringBuffer replace(int start,int end,String str)

用指定的String中的字符替换此序列的子字符串中的String 。

子串开始于指定start并延伸到字符索引end - 1 ,

或如果没有这样的字符存在的序列的结束。

第一子串中的字符被去除,然后指定String被插入在start 。 (

如果需要,此序列将被延长以容纳指定的字符串。)

package protice4;

public class Test4 {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("HelloWorld");//利用有参构造创建一个StringBuffer对象
        System.out.println(s);//输出
        StringBuffer s1 = s.replace(5, 10, "java");//把索引5-9的字符串替换成java
        System.out.println(s1);//输出
        StringBuffer s3 = s1.replace(5, 7, "world");//把索引5-6的字符串替换成world
        System.out.println(s3);//输出

    }
}

4:反转功能

public StringBuffer reverse()导致该字符序列被序列的相反代替。

如果序列中包含任何替代对,则将它们视为单个字符进行反向操作。

package protice4;

public class Test5 {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello world");//利用有参构造创建一个StringBuffer
        System.out.println(s);//输出反转前
        StringBuffer s1 = s.reverse();//反转
        System.out.println(s1);//输出反转后
    }
}

5:截取功能

(1)String substring(int start)

返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。

(2)String substring(int start, int end)

返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。

package protice4;

public class Test6 {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("Hello java and spark");//利用有参构造创建一个StringBuffer对象
        System.out.println(s);//输出
        String s1 = s.substring(5);//截取索引5到最后
        System.out.println(s1);//输出
        String s2 = s.substring(5, 10);//截取索引5-9
        System.out.println(s2);//输出
    }
}

五: String和StringBuffer的相互转换

1:String到StringBuffer

String类型不能直接赋值给StringBuffer类型

方式一:通过构造方法转换

方式二:通过StringBuffer的append()方法

2:StringBuffer -- String

方式1:通过调用StringBuffer的toString()方法

方式2:通过String的构造方法,将StringBuffer作为参数传入

方式三:利用StringBuffer的subString()方法

package protice4;

public class Test7 {
    public static void main(String[] args) {
        //StringBuffer -- String
        //1:通过StringBuffer 的substring方法
        StringBuffer s = new StringBuffer("hello");
        String s1 = s.substring(0);
        System.out.println(s1);
        System.out.println("========================");
        //2:通过toString方法
        String s2 = s.toString();
        System.out.println(s2);
        System.out.println("=========================");
        //3:通过String的有参构造将StringBuffer 当作参数传入
        String s3= new String(s);
        System.out.println(s3);
        System.out.println("==========================");
        //String到StringBuffer
        //1:通过StringBuffer有参构造将String当作参数传入
        StringBuffer s4= new StringBuffer("你好");
        System.out.println(s4);
        System.out.println("==========================");
        //2:通过StringBuffer的append方法
           String s5="世界";
           s4.append(s5);
        System.out.println(s5);
           

    }
}

六:String,StringBuffer,StringBuilder的区别

1、String的内容不可变,而StringBuffer和StringBuilder的内容是可变的

2、StringBuffer是同步线程安全的,数据安全,效率低

StringBuilder是不同步的,线程不安全,数据不安全,效率高

七:StringBuffer和数组的区别

它们两个都可以被看作是一个容器,装一些数据

但是呢,StringBuffer里面的数据都是字符串数据

数组可以存放不同数据类型的数据,但是同一个数组只允许存放同一类型的数据

八:注意

String作为参数传递

传递的是值,对外面本身变量的值没有任何影响。

StringBuffer作为参数传递

只有当谁有操作的时候,那个StringBuffer才会变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值