StringBuilder学习

举报
torchstar 发表于 2022/11/20 16:59:36 2022/11/20
【摘要】 StringBuilder的是因为StringBuilder比String的性能更好, 使用更加方便

StringBuilder的API介绍
使用StringBuilder的是因为StringBuilder比String的性能更好, 使用更加方便

StringBuilder概述

StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。

作用:提高字符串的操作效率,如拼接、修改等。

StringBuilder的有参和无参构造器

名称 说明
public StringBuilder() 创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str) 创建一个指定字符串内容的可变字符串对象
StringBuilder的常用方法

方法名称 说明
append(任意类型) 添加数据并返回StringBuilder对象本身
reverse() 将对象的内容反转
length() 返回对象内容长度
toString() 通过toString()就可以实现把StringBuilder转换为String
append方法的使用

append方法基本使用

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder strb1 = new StringBuilder();
        strb1.append("a");
        strb1.append("b");
        strb1.append("c");
        strb1.append("我爱你中国");
        strb1.append(false);
        System.out.println(strb1); // abc我爱你中国false
    }
}

append方法的链式调用

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder strb1 = new StringBuilder();
        strb1.append("a").append("b").append(1.23).append("我爱你中国").append(false);
        System.out.println(strb1); // ab1.23我爱你中国false
    }
}

注意: 在上面代码中, 打印strb1时, 我们发现打印的是字符串, 并不是字符串的地址, 说明StringBuilder内部是重写了toString方法的

源码

@Override
@IntrinsicCandidate
public String toString() {
    // Create a copy, don't share the array
    return isLatin1() ? StringLatin1.newString(value, 0, count)
                      : StringUTF16.newString(value, 0, count);
}

reverse方法演示

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder strb1 = new StringBuilder();
        strb1.append("a").append("b").append("c").reverse();
        System.out.println(strb1); // cba
    }
}

length方法演示

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder strb1 = new StringBuilder();
        strb1.append("a").append("b").append("c");
        System.out.println(strb1.length()); // 3
    }
}

toString方法使用

StringBuilder只是拼接字符串的手段, 最终的结果还是要恢复成String类型, 我们就可以调用toString方法恢复成String类型

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        StringBuilder strb1 = new StringBuilder();
        strb1.append("a").append("b").append("c");
        // 调用toString方法恢复成String类型
        strb1.toString();
        System.out.println(strb1); // abc
    }
    }

小结:

为什么拼接、反转字符串建议使用StringBuilder?

String的内容是不可变的、拼接字符串性能差。

StringBuilde的内容是可变的、拼接字符串性能好、代码优雅。

StringBuilder和StringBuilder如何选择?

定义字符串使用String

拼接、修改等操作字符串使用StringBuilder

StringBuilder的API练习
需求:

设计一个方法用于输出一个任意整型数组的字符串,要求输出成如下格式:

“该数组内容为:[11, 22, 33, 44, 55]”

分析:

1、定义一个方法,要求该方法能够接收数组,并输出数组内容。 —> 需要参数吗?需要返回值类型申明吗?

2、定义一个静态初始化的数组,调用该方法,并传入该数组。

代码展示

public class StringBuilderDemo2 {
    public static void main(String[] args) {
        int[] arr1 = null;
        System.out.println(getString(arr1));
        int[] arr2 = {101, 119, 120, 143};
        System.out.println(getString(arr2));
    }
    public static String getString(int[] arr) {
        if (arr == null) return null;
        StringBuilder strb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            strb.append(arr[i]).append(i == arr.length - 1 ? "": ", ");
        }
        strb.append("]");
        return "该数组内容为: " + strb.toString();
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。