Java研学-StringBuffer与StringBuilder

一 StringBuffer与StringBuilder

1 关于Buffer/Buffered

  缓冲(缓存)技术:由于String类底层实现是char[],数组一旦创建长度固定,不利于String类数据的增删改查操作,因此java提出缓存技术,在jvm虚拟机中开辟指定的缓存空间,完成对数据的操作,操作完之后再还给堆栈内存

2 Builder

  对指定的内容重新定义;Java中重新构建一般是指将原有的多线程操作变为单线程操作

3 StringBuffer和StringBuilder的关系

  都是对String类的延伸(对功能进行拓展);StringBuffer类多线程操作,StringBuilder类单线程操作,是对StringBuffer类重新构建

4 StringBuffer常用API

// 定义格式
public final class StringBuffer{}

① 实例化对象

// 实例化对象并创建缓存区
public StringBuffer()

// 实例化对象,并将指定的String存储到缓存区
public StringBuffer(String value)

// 与String类中的同名方法可以参考StringAPI

② 增

// 将任意数据类型追加到缓存区末尾
public StringBuffer append(Object obj)

// 将任意的数据类型从指定的位置插入到缓存区中
public StringBuffer insert(int index,Object obj)

// 例子
public class Play {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("工作申请单");
        sb.append("签字").append("wwsw");
        sb.insert(0,"qqq");
        System.err.println(sb.toString());
    }
}

append方法和+号都能够完成字符串的尾部追加,但是操作的元素类型不同,操作位置不同

操作的元素类型不同

+:操作String类型

append方法:操作的是StringBuffer/StringBuilder类型

操作位置不同:

+:操作的是堆栈内存

append方法:操作的是缓存区

③ 删

// 删除字符串指定范围内的所有数据,其中包含start,不包含end
public StringBuffer delete(int start,int end)

// 删除指定位置上的元素
public StringBuffer deleCharAt(int index)

// 例子
public class Play{
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("工作申请单");
        sb.delete(1,3);
        System.err.println(sb.toString());
        // 工请单
        sb.deleteCharAt(2);
        System.err.println(sb.toString());
        //工请
    }
}

④ 修改

// 用指定的String数据替换字符串中指定范围的数据,其中包含start不包含end
public StringBuffer replace(int start,int end,String value)

// 使用指定的字符替换原有位置上的字符
public void setCharAt(int index,char ch)

// 例子
public class Play{
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("工作申请单");
        sb.replace(1,3,"qqww");
        System.err.println(sb);
        // 工qqww请单
        sb.setCharAt(4,'!');
        System.err.println(sb);
        // 工qqw!请单
    }
}

二 StringBuilder类

//定义格式
public final class StringBuilder{}

//常用API与StringBuffer类一致,详情参考StringBuffer类

// 科学计数法
public class Play {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.err.println("输入整数:");
        // 通过包装类保证接受的数据为数字
        Integer num=sc.nextInt();
        // 科学计数法
        StringBuilder sb=new StringBuilder(num.toString());
        if(sb.length() >= 4){
            for (int i = sb.length() - 3; i > 0; i-=3) {
                sb.insert(i,',');
            }
        }
        System.err.println(sb.toString());
    }
}

1 String , StringBuffer , StringBuilder 三个特点

  ① 三个的相同点:这三个类都是操作字符串类型的数据的类

  ② String StringBuffer相同点

    都是多线程安全的操作(它实现了进程同步故安全);都出现在JDK1.0版本

  ③ StringBuffer和StringBuilder的相同点

    都是可变字符串类;都操作的是缓存区

  ④ String是定长字符串,操作的是堆栈内存

  ⑤ StringBuilder是单线程操作快捷,出现版本是JDK5

你可能感兴趣的:(#,Java研学,java,开发语言)