JavaAPI-StringBuffer类

StringBuffer类

在java.lang中,不用导包

由于字符串是常量,因此一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串的修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)。StringBuffer类和String类最大的区别在于它的内容和长度是可以改变的。

不能像String那样用加号连接

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

构造方法

  1. StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16字符。

  2. StringBuffer(int capacity):构造一个不带字符,但具有指定初始容量的字符串缓冲区。

  3. StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        System.out.println(sb.length());  //容器中的字符个数,实际值
        System.out.println(sb.capacity());//容器的初始容量,理论值

        StringBuffer sb2=new StringBuffer(10);
        System.out.println(sb2.length());
        System.out.println(sb2.capacity());

        StringBuffer sb3=new StringBuffer("eaglezsx");
        System.out.println(sb3.length());
        System.out.println(sb3.capacity());

    }

运行结果为

0
16
0
10
8
24

添加功能

  1. StringBuffer append(String str):append方法有很多重载,可以将任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身。
  2. StringBuffer insert(int offset,String str):insert方法也有很多重载,在指定位置添加任意类型数据。
public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        StringBuffer sb2=sb.append(false);
        StringBuffer sb3=sb.append("eaglezsx");
        System.out.println(sb);
        System.out.println(sb2);
        System.out.println(sb3);

    }

运行结果为

falseeaglezsx
falseeaglezsx
falseeaglezsx

StringBuffer是字符串缓冲区,当new的时候在堆内存创建了一个对象,当调用append方法时,不会再创建对象,而是不断的向原缓冲区添加字符。这三个变量指向的是同一个对象。

public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("abcd");
        sb.insert(3, "A");
        System.out.println(sb);
    }

运行结果为

abcAd

删除功能

  1. StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身

  2. StringBuffer delete(int start,int end):删除从指定位置开始到指定位置结束的内容,并返回本身。

    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("abcdef");
        sb.deleteCharAt(2);
        System.out.println(sb);
    }

    运行结果为

    abdef
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("abcdef");
        sb.delete(2,4);  //包含头,不包含尾
        System.out.println(sb);
    }

    运行结果为

    abef

    清空缓冲区sb.delete(0,sb.length());

替换和反转功能

  1. StringBuffer replace(int start,int end,String str):从start开始到end用str替换

  2. StringBuffer reverse():字符串反转

public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("aaaa");
        sb.replace(1, 3, "b");//包含头,不包含尾
        System.out.println(sb);
    }

运行结果为

aba
public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("eagle");
        sb.reverse();
        System.out.println(sb);
    }

运行结果为

elgae

截取功能

  1. String substring(int start):从指定位置截取到末尾
  2. String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

    public static void main(String[] args) {
    StringBuffer sb = new StringBuffer("eagle");
    String str = sb.substring(2);
    String str2=sb.substring(2, 3);
    System.out.println(str);
    System.out.println(str2);
    }

运行结果为

gle
g

String和StringBuffer之间的转换

  1. String—>StringBuffer
    • 通过构造方法
    • 通过append方法
public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("eagle");

        StringBuffer sb2=new StringBuffer();
        sb2.append("eagle");
    }
  1. StringBuffer—>String
    • 通过构造方法
    • 通过toString()方法
    • 通过subSting(0,length)
public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("eagle");
        String s1=new String(sb);

        String s2=sb.toString();

        String s3=sb.substring(0,sb.length());
    }

StringBuffer和StringBuilder的区别

StringBuffer是JDK1.0版本的,是线程安全的,效率低。

StringBuilder是JDK1.5版本的,是线程不安全的,效率高。

String是一个不可变的字符序列。

StringBuffer和StringBuilder是可变的字符序列。

String和StringBuffer分别作为参数传递

基本数据类型的传递,不改变其值。

引用数据类型的传递,改变其值。

String类虽然是引用数据类型,但是他当做参数传递时和基本数据类型是一样的。

public static void main(String[] args) {
        String s="eagle";
        System.out.println(s);
        change(s);
        System.out.println(s);

        System.out.println("--------------------------");

        StringBuffer sb=new StringBuffer();
        sb.append("eagle");
        System.out.println(sb);
        change(sb);
        System.out.println(sb);
    }

    private static void change(StringBuffer sb) {
        sb.append("zsx");
    }

    private static void change(String s) {
        s+="zsx";
    }

运行结果为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值