day15 JavaSe之StringBuffer类概述及其构造方法

本文探讨了Java中的线程安全StringBuffer类,对比其与String的区别,包括容量管理、方法如append、delete和replace等操作。同时,讲解了在并发场景下使用StringBuffer的效率优势,以及生活中的线程安全案例。深入理解了如何在高效和安全性间权衡,涉及字符串操作的最佳实践。
摘要由CSDN通过智能技术生成

1、线程安全的
2、安全,代表着有同步操作出现,数据是安全的,效率不高
3、不安全,不同步,效率高
4、安全问题和效率问题一直都是头疼的问题
5、生活中哪些是线程安全的案例:
线程安全:银行的一些业务,售票,医院取号。。
不是安全问题的,效率高的:博客,视频会员。。
public final class StringBuffer
线程安全,可变的字符序列。
字符串缓冲区就像一个String ,但可以修改。
在任何时间点,它包含一些特定的字符序列,
但可以通过某些方法调用来更改序列的长度和内容。
简单记忆:它就是一个线程安全的可变字符串
StringBuffer和String的区别?
1、前者的长度和内容都是可变的,后者都不可变
2、前者可以提前给出一个缓冲区,可以进行字符串的拼接,而不会重新开辟新的空间
后者,每创建新的字符串都会开辟新的空间
StringBuffer的构造方法:
StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。
StringBuffer的方法:
public int capacity() 返回当前容量。
容量是新插入字符可用的存储量,超过此值将进行分配。
public int length() 返回长度(字符数)。

public class StringBufferDemo1 {
    public static void main(String[] args) {
        // StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。
        StringBuffer sb =new StringBuffer();
        int c =sb.capacity();
        System.out.println(c);
        //StringBuffer(int capacity)  构造一个没有字符的字符串缓冲区和指定的初始容量。
        StringBuffer sb1 =new StringBuffer(50);
        int c1 =sb1.capacity();
        System.out.println(c1);
        //StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。插入
        StringBuffer sb2 =new StringBuffer("hhhh");
        System.out.println(sb2);
        int c2 =sb2.capacity();
        System.out.println(c2);


}
}

StringBuffer:
添加功能
public StringBuffer append(String str)
可以把任意类型的数据添加到字符串缓冲区中
返回的是当前字符串缓冲区本身

public class StringBufferDemo2 {
    public static void main(String[] args) {
        StringBuffer sb =new StringBuffer();
//public StringBuffer append(String str)
        StringBuffer stringBuffer =sb.append("hello");
        System.out.println(sb);//打印sb
        System.out.println(stringBuffer);//打印 stringBuffer
        System.out.println(sb==stringBuffer);//判断 sb 与stringBuffer是否相等
        sb.insert(2,"hello");//hello中在第二个元素后加入hello
        System.out.println(sb);
    }

}

删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)

public class StringBufferDemo3 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();

        sb.append("hello").append("java").append("bigdata");
        System.out.println(sb);

        System.out.println("******************************");
        //public StringBuffer deleteCharAt(int index)删除char在这个序列中的指定位置。
        //返回的内容是本身
        sb.deleteCharAt(5);
        System.out.println(sb);//删除sb中下标为5的元素
        //        sb.deleteCharAt(20); //StringIndexOutOfBoundsException 超限
        //        System.out.println(sb);


        //public StringBuffer delete(int start,int end)
        // 删除此序列的子字符串中的字符。
        // 子串开始于指定start并延伸到字符索引end - 1 ,
        // 或如果没有这样的字符存在的序列的结束。 如果start等于end ,则不作任何更改。
        //删除范围
        sb.delete(5,9);
        System.out.println(sb);
        //如何利用现有方式删除所有的字符
        System.out.println("******************************");
        sb.delete(0,sb.length());
        System.out.println(sb);

    }
}

替换功能
public StringBuffer replace(int start,
int end,
String str)
用指定的String中的字符替换此序列的子字符串中的String 。
子串开始于指定start并延伸到字符索引end - 1 ,
或如果没有这样的字符存在的序列的结束。
第一子串中的字符被去除,然后指定String被插入在start 。 (
如果需要,此序列将被延长以容纳指定的字符串。)

public class StringBufferDemo4 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();

        sb.append("hello").append("hadoop").append("hive").append("spark");
        System.out.println(sb);



        //public StringBuffer replace(int start,int end,String str)
        //这里的start和end表示的是原来的字符串需要替换的区间,含头不含尾
        sb.replace(11,12,"数加学院真好");
        System.out.println(sb);



    }
}

反转功能 public StringBuffer reverse()导致该字符序列被序列的相反代替。
如果序列中包含任何替代对,则将它们视为单个字符进行反向操作。

public class StringBufferDemo5 {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        sb.append("我想买三星s20u");
        sb.replace(2,3,"好");
        System.out.println(sb);
    }

}

截取功能
            String substring(int start)
                返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。
            String substring(int start, int end)
                返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。
public class StringBufferDemo6 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("java")
                .append("hadoop")
                .append("hive")
                .append("spark")
                .append("flink");

        System.out.println(sb);
        System.out.println("******************");

        //String substring(int start)
        //返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列
        String substring = sb.substring(4);
        System.out.println("截出来的字符串为:"+substring);
        System.out.println("StringBuffer的内容为:"+sb);

        //String substring(int start, int end)
        //返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。
        String substring1 = sb.substring(14, 19);
        System.out.println("截出来的字符串为:"+substring1);
        System.out.println("StringBuffer的内容为:"+sb);


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值