StringBuffer类

StringBuffer类

基本介绍

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

2、很多地方和String相同,但是StringBuffer是可变长度

3、StringBuffer是一个容器

package StringBuffer_;

public class StringBuffer01 {
    public static void main(String[] args) {
        //1、StringBuffer的直接父类是AbstractStringBuffer
        //2、StringBuffer实现了Serializable接口,即StringBuffer的对象可以串行化
        //3、在父类中AbstractStringBuffer有属性char[] value;不是final
        //该value数组存放字符串内容,因此存放在堆中
        //4、StringBuffer是一个 final类,不可以被继承
        //5、因为StringBuffer字符内容是存在char[] value。所以在变化时(增加/删除),不用每次都更换地址(即不用每次都创建新的对象),所以它的效率高于String
        StringBuffer stringBuffer = new StringBuffer();
    }
}

StringBuffer和String的对比

1、String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低在这里插入图片描述

private fianl char value[];//放在常量池

2、StringBuffer保存的是字符串常量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,只有当空间大小不够的时候一次性括,效率较高在这里插入图片描述

char[] value;//放在堆

StringBuffer的转换

StringBuffer的构造器

StringBuffer()
构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer(CharSequence seq)
构造一个包含与指定的相同字符的字符串缓冲区 CharSequence 。
StringBuffer(int capacity)
构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer(String str)
构造一个初始化为指定字符串内容的字符串缓冲区。
package StringBuffer_;

/**
 * StringBuffer构造器的使用
 */
public class StringBuffer02 {
    public static void main(String[] args) {
        //构造器的使用
        //会创建一个容量大小为16的char[],用于存放字符内容
        StringBuffer stringBuffer = new StringBuffer();
        //通过构造器指定char[] 大小
        StringBuffer stringBuffer1 = new StringBuffer(100);
        //通过给一个String 创建 StringBuffer,char[]大小就是str.length()+16
        StringBuffer hello = new StringBuffer("hello");
    }
}

String 和StringBuffer相互转换的实现

String----->StringBuffer
StringBuffer--->String

package StringBuffer_;

public class StringAndStringBuffer {
    public static void main(String[] args) {
        //String--->StringBuffer
        String str="hello tom";
        //1.使用构造器
        //注意,返回的才是StringBuffer对象,对str本身没有影响
        StringBuffer stringBuffer = new StringBuffer(str);
        //2.使用append方法
        StringBuffer stringBuffer1 = new StringBuffer();
        stringBuffer1=stringBuffer1.append(str);
        
        //StringBuffer--->String
        StringBuffer hello = new StringBuffer("hello");
        //1.使用StringBuffer提供的toString方法
        String s = hello.toString();
        //使用构造器
        String s1 = new String(hello);
    }
}

StringBuffer类常见方法

1、增append

2、删delete(start, end)

3、改replace(start , end,String)将start----end之间的内容替换掉,不含end

4、查indexof 查找子串在字符串第一次出现的索引,如果找不到返回-1

5、插insert

6、获取长度 length

package StringBuffer_;

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        //增
        s.append(",");
        s.append("你好");
        System.out.println(s);
        //删
        //删除索引:>=start && <end处的字符
        s.delete(0,4);//>=0   <4
        System.out.println(s);
        //改
        s.replace(4,6,"hhh");
        System.out.println(s);
        //查
        StringBuffer s1 = new StringBuffer("jksdhksdgsdsd");
        System.out.println(s1.indexOf("s"));
        //插
        //在索引为2的位置插入,原来为2的此处后移
        s1.insert(2,"你好");
        System.out.println(s1);
        //获取长度
        System.out.println(s1.length());
    }
}

习题:

package StringBuffer_;

import java.util.Scanner;

public class StringBufferExercise02 {
    /**
     * 输入商品名称和商品价格,要求打印效果示例, 使用前面学习的方法完成:
     * 商品名 商品价格
     * 韩顺平循序渐进学 Java 零基础
     * 手机 123,564.59 //比如 价格 3,456,789.88
     * 要求:价格的小数点前面每三位用逗号隔开, 在输出。
     *
     * 思路:
     * 定义一个Scanner对象,接收用户的输入价格(String)
     * 使用StringBuffer的insert,将String转成StringBuffer
     * 使用相关方法进行字符串的处理
     */
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String price=scan.next();
        //String price="123456.44";
        StringBuffer sb = new StringBuffer(price);
        for (int i=sb.indexOf(".")-3;i>0;i-=3){
            sb=sb.insert(i,",");
        }
        System.out.println(sb);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值