StringBuffer类详解

StringBuffer

定义

1.java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删

2.很多方法与String相同,但StringBuffer是可变长度的。
3.StringBuffer是一个容器。

String和StringBuffer的不同

1.String保存的是字符串常量,里面的值不嫩更改,每次String的更新实际上就是更改地址,效率较低

String类的常量定义: private final char value[];

2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高

StringBuffer字符串变量定义: char][] value;放在堆

String和StringBuffer的互相转换
package string;

public class StringBufer01 {
    public static void main(String[] args) {
        //String --> StringBuffer
        String str = "sad";
        //1.使用构造器
        StringBuffer stringBuffer = new StringBuffer(str);
        System.out.println(stringBuffer);
        //2.使用append方法
        StringBuffer stringBuffer1 = new StringBuffer();
        stringBuffer1 = stringBuffer1.append(str);

        //StringBuffer ---> String
        StringBuffer stringBuffer2 = new StringBuffer("你好");
        //1。利用StringBuffer对象的toString方法
        String str2 = stringBuffer2.toString();
        System.out.println(str2);
        //2.利用构造器
        String str3 = new String(stringBuffer2);
        System.out.println(str3);

    }
}
StringBuffer类的常用方法

1.增 append

2.删delete(start,end)

3.改replace(start,end,String)

4.查indexOf 查找字符串第一次出现的位置,找不到返回-1

5.插入 insert

6.获取长度length

package string;

public class StringBuffer02 {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("hello,java");
        System.out.println(stringBuffer);
        //1.增 append
        stringBuffer.append(",I am wulian");
        System.out.println(stringBuffer);
        //2.删delete(start,end)
        stringBuffer.delete(0,2);
        System.out.println(stringBuffer);
        //3.改replace(start,end,String)
        stringBuffer.replace(0,3,"hhh");
        System.out.println(stringBuffer);
        //4.查indexOf  查找字符串第一次出现的位置,找不到返回-1
        System.out.println(stringBuffer.indexOf("java"));
        //5.插入 insert
        stringBuffer.insert(1,'a');
        System.out.println(stringBuffer);
        //6.获取长度length
        System.out.println(stringBuffer.length());
    }
}

编译结果

在这里插入图片描述

测试

package string;

public class StringBufferTest {
    public static void main(String[] args) {
        String str = null;
        StringBuffer stringBuffer = new StringBuffer();
        System.out.println(stringBuffer.length());
        stringBuffer.append(str);
        System.out.println(stringBuffer.length());
        StringBuffer stringBuffer1 = new StringBuffer(str);
        System.out.println(stringBuffer.length());
    }
}

编译结果
在这里插入图片描述

分析

使用append方法是将null作为字符串添加到char[]中,故数组长度为4

但是使用StringBuffer构造器是将String对象作为参数传入,但是此时str为空,故出现了空指针异常
在这里插入图片描述

​ 如图所示 str为空,str.length() + 16 会报错

联系

输入商品名称和商品价格,要求打印效果示例,使用前面学习的方法完成商品名商品价格
手机123,564.59 1/比如价格3.456,789.88
要求:价格的小数点前面每三位用逗号隔开,在输出。

package string;

import java.util.Scanner;

public class StringBufferTest {
    public static void main(String[] args) {
      /*String price = "13123.342";
      StringBuffer stringBuffer = new StringBuffer(price);
        int  i = stringBuffer.indexOf(".");
        System.out.println(i);
        stringBuffer.insert(i-3,',');
        System.out.println(stringBuffer);*/

        String phone = new String("手机");
        String price = new Scanner(System.in).next();
        StringBuffer stringBuffer = new StringBuffer(price);
        for (int i = stringBuffer.lastIndexOf(".") -3; i > 0; i -= 3){
            stringBuffer.insert(i,',');
        }
        System.out.print(phone + "  ");
        System.out.println(stringBuffer);
    }
}

编译结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值