常见类---StringBuffer类

一.StringBuffer类的概述

  1. StringBuffer类:线程安全的可变字符串序列
    线程安全 —> 同步 —> 效率低
    线程不安全 —> 不同步 —> 效率高
  2. String和StringBuffer,StringBulider的区别
    共同点:
    在内存中,始终返回的都是一个字符串类型
    不同点:
    后者,在内存中会构造一个字符串缓冲区,是一个可变的字符串序列;String一旦被赋值,其值不能再改变,是一个不可变的字符串序列
    StringBuffer:线程安全,同步,效率低,用在多线程中使用
    StringBulider:线程不安全,不同步,效率高,用在单线程中
  3. StringBuffer和数组的区别
    都是一个容器:
    数组:以存储多个元素,这多个元素必须保证数据类型一致
    StringBuffer:在内存始终是一种数据类型,值都是字符串
    形式参数的问题:
    String类型作为形式参数和基本数据类型是一样的
    StringBuffer作为形式参数和基本数据类型不一样
public class Demo7{
    public static void main(String[] args) {
        //定义两个字符串,字符串一旦被赋值,其值不能在改变
        String s1 = "hello" ;
        String s2 = "world" ;

        s1 = s1 +"java" ;
        System.out.println(s1);

        System.out.println("s1:"+s1);
        System.out.println("s2:"+s2);

        change(s1,s2) ;
        System.out.println("s1:"+s1);
        System.out.println("s2:"+s2);
        System.out.println("----------------------");

        StringBuffer sb1 = new StringBuffer("hello") ;
        StringBuffer sb2 = new StringBuffer("world") ;
        System.out.println("sb1:"+sb1);
        System.out.println("sb2:"+sb2);
        change(sb1,sb2) ;
        System.out.println("sb1:"+sb1);
        System.out.println("sb2:"+sb2);
    }

    //StringBuffer作为形式参数,无返回值和基本数据类型不一致,具体可参照源码分析
    public static void change(StringBuffer sb1, StringBuffer sb2) {
        sb1 = sb2 ;
        sb2.append(sb1) ;
    }

    //字符串一旦被赋值,其值不改变
    public static void change(String s1, String s2) {
        s1 = s2 ;
        s2 = s1 + s2 ;
    }
}

结果:
hellojava
s1:hellojava
s2:world
s1:hellojava
s2:world
----------------------
sb1:hello
sb2:world
sb1:hello
sb2:worldworld

二.StringBuffer的常见方法

StringBuffer的构造方法和获取方法

  1. public StringBuffer():构造一个字符串缓冲区,初始容量为 16 个字符
  2. public StringBuffer(int capacity):构造一个字符串缓冲区,指定容量
  3. public StringBuffer(String str):将str字符串创建到字符串缓冲区中,容量:str的长度+16
  4. public int length():获取字符串长度
  5. public int capacity():获取字符串缓冲区的容量大小
public class Demo1 {
    public static void main(String[] args) {
        //构造一个字符串缓冲区,初始容量为16
        StringBuffer s1 = new StringBuffer();

        //求字符串长度
        System.out.println(s1.length());

        //求字符串缓冲区的容量大小
        System.out.println(s1.capacity());
        System.out.println("--------------");

        //创建一个指定容量的字符串缓冲区
        StringBuffer s2 = new StringBuffer(20);
        System.out.println(s2.length());
        System.out.println(s2.capacity());
        System.out.println("--------------");

        StringBuffer s3 = new StringBuffer("abc");
        System.out.println(s3.length());
        System.out.println(s3.capacity());
        System.out.println("--------------");

        String s = "hello" ;
        //报错,下面两种都是错误的
//      StringBuffer s4 = s ;
//      StringBuffer s5 = "hello" ;

    }
}

结果:
0
16
--------------
0
20
--------------
3
19
-------------

StringBuffer的添加功能

  1. public StringBuffer append(String str):表示在字符串缓冲追加,返回字符串缓冲区本身
  2. public StringBuffer insert(int offset,String str):在指定字符位置插入str这个字符串,返回缓冲区本身
public class Demo2 {
    public static void main(String[] args) {
        //创建字符串缓冲区
        StringBuffer sb = new StringBuffer();

        //字符串缓冲区的添加功能
        sb.append("hello");
        sb.append("world");
        System.out.println(sb);

        //在指定位置插入str这个字符串,返回缓冲区本身
        sb.insert(2,"java");
        System.out.println(sb);
    }
}

结果:
helloworld
hejavalloworld

StringBuffer的删除功能

  1. public StringBuffer deleteCharAt(int index):删除指定索引处的字符,返回的是字符串缓冲区本身
  2. public StringBuffer delete(int start,int end):删除从指定位置开始,到指定位置结束,返回字符串缓冲区本身
public class Demo3 {
    public static void main(String[] args) {
        //创建字符串缓冲区
        StringBuffer sb = new StringBuffer("helloworld");

        //删除指定索引处的字符,返回的是字符串缓冲区本身
        sb.deleteCharAt(2);
        System.out.println(sb);

        //删除从指定位置开始,到指定位置结束,返回字符串缓冲区本身
        sb.delete(3, 5);
        System.out.println(sb); 
    }
}

结果:
heloworld
helorld

StringBuffer的替换功能

  1. public StringBuffer replace(int start,int end,String str):从指定位置开始到指定位置结束进行替换,替换的内容为一个新的字符串,返回字符串缓冲区本身
public class Demo4 {
    public static void main(String[] args) {
        //创建字符串缓冲区
        StringBuffer sb = new StringBuffer("helloworld");

        //从指定位置开始到指定位置结束进行替换
        sb.replace(5, 9,"java");
        System.out.println(sb); 
    }
}

结果:
hellojavad

StringBuffer的反转功能

  1. public StringBuffer reverse():对字符串进行反转,是StringBuffer的特有功能,字符串String没有这个功能
public class Demo5 {
    public static void main(String[] args) {
        //创建字符串缓冲区
        StringBuffer sb = new StringBuffer("helloworld");

        //调用字符串的反转功能
        sb.reverse();
        System.out.println(sb); 
    }
}

结果:
dlrowolleh

StringBuffer的截取功能

  1. public String substring(int start):从指定位置开始截取到字符串末尾位置,返回新的字符串类型,而不是字符串缓冲区本身
  2. public String substring(int start,int end):从start位置开始,截取到end位置,包左不包右
public class Demo6 {
    public static void main(String[] args) {
        //创建字符串缓冲区
        StringBuffer sb = new StringBuffer("helloworldjava");

        //public String substring(int start)
        String a = sb.substring(2);
        System.out.println(a);

        //包左不包右
        String b = sb.substring(2,5);
        System.out.println(b);
    }
}

结果:
lloworldjava
llo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值