StringBuffer(字符缓冲区)与StringBuilding

本文介绍了Java中的StringBuffer和StringBuilder,包括它们的创建、字符串操作如替换、插入和提取,转换为字符数组,拼接、删除和反转字符串的方法。还讨论了String到StringBuffer的转换及其在字符串处理中的效率优势。

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

StringBuffer(字符缓冲区)与StringBuilding

1.介绍:
1.都是字符缓冲区有什么区别呢?
2.都是一个 可变的序列(操作的是一个原字符串)
3.StringBuffer 线程安全效率低(耗费系统资源)
4.StringBuilding 线程不安全 效率高(相对于StringBuffer耗费资源)
5.使用方法一样
6.String 是不可变的 线程不安全的
7.stringBuffer 是可变的 操作的是对象本身
2.无参创建StringBuffer
    //  创建一个StringBuffer(拼接字符串)
        StringBuffer stringBuffer = new StringBuffer();
        //  获取容量(理论)  默认值  16
        System.out.println(stringBuffer.capacity());
        //  获取长度
        System.out.println(stringBuffer.length());
        //  转化为字符串
        System.out.println(stringBuffer.toString());
        //  拼接字符串(操作的是原对象)
        stringBuffer.append("wanglong");
        //  如果直接打印对象 系统会帮你调用toString方法
        System.out.println(stringBuffer);


运行结果 
16
0        
空格
wanglong
3.StringBuffer的 字符串 替换 插入 提取字符 操作
    1.在第三位置插入字符串true
    StringBuffer stringBuffer = new StringBuffer("wanglong");
    stringBuffer.insert(3, true);
    System.out.println(stringBuffer);
    2.将角标位置2的字符替换为c
    stringBuffer.setCharAt(2, 'c');
    System.out.println(stringBuffer);
    3.提取字符串角标位置7的字符
    char c = stringBuffer.charAt(7);
    System.out.println(c);

运行结果:
wantrueglong
wactrueglong
g
 注释:
 1.插入boolean类型 就相当于把 truefalse当字符串插入
 2.插入字符和字符修改的时候 不能越界
4.StringBuffer转字符数组
1.思路:
   先转成字符串 然后 再变 字符数组
2.代码:
     StringBuffer stringBuffer = new StringBuffer("wanglong");
     char[] array = stringBuffer.toString().toCharArray();
     System.out.println(array[1]);

运行结果: a
5.StringBuffer 字符 拼接 删除 与反转
1.创建StringBuffer对象
StringBuffer stringBuffer = new StringBuffer("wanglong");

2.拼接555
    stringBuffer.append("555");
3.删除角标位置1到五的字符
    stringBuffer.delete(1, 5);
    System.out.println(stringBuffer);

4.删除角标位置2 的字符
    stringBuffer.deleteCharAt(2);
    System.out.println(stringBuffer);

5.反转字符串
    stringBuffer.reverse();
    System.out.println(stringBuffer);

运行结果:
wong555
wog555
555gow

注释:删除范围删头不删尾
注意:开始坐标不能越界 结束坐标越界 系统当清空处理
6.String转型StringBuffer进行反转
        System.out.println("请输入一个字符串");
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        //  转成StringBuffer
        StringBuffer stringBuffer = new StringBuffer(string);
        //  反转
        stringBuffer.reverse();
        //  转化为字符串再输出
        System.out.println(stringBuffer.toString());

输入:123
运行结果:321
练习代码:
        /*
         * 需求
         * 把int[] array = new int[]{1,2,3,4};
         * 输出 [1, 2, 3, 4];
         * 要求:使用两种方法(String 和 StringBuffer)
         */
方法1:
        int[] array = new int[]{1,2,3,4};   
        String string = new String("[");
        //  遍历数组
        for(int i = 0; i < array.length; i++) {
            //  拼接字符串
            string = string + array[i];
            if(i != array.length - 1) {
                string = string + ",";
            }
        }
        string = string + "]";
        System.out.println(string);
方法2:

        int[] array = new int[]{1,2,3,4};   
        StringBuffer stringBuffer = new StringBuffer("[");
        for(int i = 0; i < array.length; i++) {
            if(i != array.length -1 ) {
                stringBuffer.append(array[i]).append(",");
            }else {
                stringBuffer.append(array[i]).append("]");
            }
        }
        System.out.println(stringBuffer);
7.StringBuffer截取字符串
StringBuffer  sb = new StringBuffer();
sb.append("wangdns");
截取位置角标4及后面的字符串
String  string = sb.substring(4);
System.out.println(string);
截取位置角标04的字符串
String string2  = sb.substring(0,4);
System.out.println(string2);


注释:截取规则 截头不截尾

运行结果;
dns
wang
8.字符串做参数和String做参数的区别
public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("wanglong");
        fun9(stringBuffer);
        System.out.println(stringBuffer);

        StringBuilder stringBuilder = new StringBuilder("王龙");
        fun10(stringBuilder);
        System.out.println(stringBuilder);
        }
    public static void fun9(StringBuffer stringBuffer) {
        stringBuffer.append("znb");
    }

    //  地址的传递
    public static void fun10(StringBuilder stringBuilder) {
        stringBuilder.append("haha");
    }

注释:
1. StringBuffer作为参数的时候,和引用数据类型一样
2.相当于是 地址的传递
3.字符串作为参数的时候 跟基本数据类型作为参数一样 相当于是值得传递

运行结果:
wanglongznb
王龙haha

结束:
欢迎浏览 点个赞呗 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值