入门Java编程必备之StringBuilder类详解!

2023-11-20 11:18:24 浏览数 (1)


theme: healer-readable

highlight: a11y-dark


哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java中,字符串是一种不可变的数据类型,也就是说,一旦创建了该字符串,就无法对其进行修改。但是,在实际开发中,我们常常需要对字符串进行拼接,删除和替换等操作。这就需要一个可以动态修改字符串的类。

摘要

  StringBuilder类可以理解为一个字符串缓冲区,它提供一个可变的字符序列,可以在该序列上进行修改操作,比如追加,插入,删除和替换等。与String类不同的是,String类的修改操作每次都会创建一个新的字符串对象,而StringBuilder类的修改操作都是在原有的字符序列上进行的,不会创建新的对象,因此在频繁进行字符串操作时,StringBuilder类的效率比String类高。

StringBuilder类

简介

  StringBuilder类位于Java.lang包中,是一个可变字符串类,它继承于AbstractStringBuilder类,实现了CharSequence, Appendable, Serializable等接口。StringBuilder的主要作用是用来处理字符串,提供一系列的操作方法,包括追加,插入,删除和替换等。StringBuilder类适用于构建字符串的场景,可以提高字符串的操作效率。

源代码解析

下面是StringBuilder类的源代码:

代码语言:java复制
public final class StringBuilder extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
    /**
     * 构造一个不带任何字符初始容量为16的StringBuilder
     */
    public StringBuilder() {
        super(16);
    }

    /**
     * 构造一个带有指定初始容量的StringBuilder
     *
     * @param capacityBuilder的初始容量
     * @throws NegativeArraySizeException 如果capacity为负数
     */
    public StringBuilder(int capacity) {
        super(capacity);
    }

    /**
     * 构造一个StringBuilder,它包含与指定的CharSequence相同的字符序列
     *
     * @throws NullPointerException 如果seq为null
     */
    public StringBuilder(CharSequence seq) {
        this(seq.length()   16);
        append(seq);
    }

    /**
     * 构造一个StringBuilder,它包含与指定的String相同的字符序列
     *
     * @throws NullPointerException 如果str为null
     */
    public StringBuilder(String str) {
        this(str.length()   16);
        append(str);
    }
}

  可以看到,StringBuilder类提供了多个构造方法,可以根据不同的场景选择不同的构造方法来创建StringBuilder对象。

  StringBuilder类是一个可变的字符串,允许进行多次修改而不创建新的String对象。它是AbstractStringBuilder类的子类,实现了CharSequence接口和java.io.Serializable接口。

  该类定义了四个构造函数,分别为不带参数的构造函数、指定初始容量的构造函数、包含CharSequence的构造函数和包含String的构造函数。其中,不带参数的构造函数会创建一个长度为16的StringBuilder对象。指定初始容量的构造函数会根据参数capacity创建一个StringBuilder对象。包含CharSequence的构造函数和包含String的构造函数会创建一个容量为参数长度加16的StringBuilder对象,并将参数序列追加到StringBuilder对象末尾。

  如果capacity参数为负数,则会抛出NegativeArraySizeException异常。如果seq或str参数为null,则会抛出NullPointerException异常。

  如下是部分源码截图:

在这里插入图片描述在这里插入图片描述

应用场景案例

以下是一些使用StringBuilder类的场景:

  1. 字符串拼接
代码语言:java复制
public class StringBuilderTest {

    //测试字符串拼接
    public static void testAppend() {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello ");
        sb.append("world!");
        System.out.println(sb.toString()); //result = "Hello world!"
    }

    public static void main(String[] args) {
        testAppend();
    }
}

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述
  1. 替换操作
代码语言:java复制
    //测试替换操作
    public static void testReplace() {
        StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
        sb.replace(4, 9, "slow");
        System.out.println(sb.toString()); // sb = "The slow brown fox jumps over the lazy dog."
    }

    public static void main(String[] args) {
        testReplace();
    }

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述
  1. 删除操作
代码语言:java复制
    //测试删除操作
    public static void testDelete() {
        StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
        sb.delete(4, 9);
        System.out.println(sb.toString()); // sb = "The brown fox jumps over the lazy dog."
    }

    public static void main(String[] args) {
        testDelete();
    }

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

如下还有几个操作,我就留给同学们自行测试玩耍啦,这里就不一一赘述啦。

  1. 插入操作
代码语言:java复制
StringBuilder sb = new StringBuilder("The brown fox jumps over the lazy dog.");
sb.insert(4, "quick "); // sb = "The quick brown fox jumps over the lazy dog."
  1. 反转操作
代码语言:java复制
StringBuilder sb = new StringBuilder("hello");
sb.reverse(); // sb = "olleh"

优缺点分析

优点:

  1. StringBuilder类是可变的,可以在原有的字符序列上进行修改操作,避免了每次操作都创建新对象的问题。
  2. StringBuilder类提供了多种操作方法,可以方便地进行字符串拼接,删除,替换等操作。
  3. StringBuilder类的效率比String类高,特别是在频繁进行字符串操作时表现更加突出。

缺点:

  1. StringBuilder类不是线程安全的,如果有多个线程同时对同一个StringBuilder对象进行操作,可能会出现并发问题。
  2. StringBuilder类无法直接进行比较操作,必须先转换成String类型才能进行比较。

类代码方法介绍

以下是StringBuilder类的常用方法:

  1. append()方法:将指定的字符串或字符追加到此序列的末尾。
  2. replace()方法:用指定的字符串替换此序列中在指定位置范围内的子字符串。
  3. delete()方法:从此序列中删除从 start 开始到 end - 1 结束的字符。
  4. insert()方法:将指定的字符串或字符插入此序列中。
  5. reverse()方法:返回一个新的StringBuilder对象,它是此序列的一个倒序排列。
  6. toString()方法:将此序列用字符串表示形式返回。

测试用例

以下是一个测试用例,用于测试StringBuilder类的基本功能:

测试代码演示

代码语言:java复制
package com.example.javase.se.classes;

/**
 * @Author ms
 * @Date 2023-11-02 18:25
 */
public class StringBuilderDemo {

    public static void main(String[] args) {
        testAppend();
        testReplace();
        testDelete();
        testInsert();
        testReverse();
    }

    public static void testAppend() {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello ");
        sb.append("world!");
        System.out.println(sb.toString());
    }

    public static void testReplace() {
        StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
        sb.replace(4, 9, "slow");
        System.out.println(sb.toString());
    }

    public static void testDelete() {
        StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
        sb.delete(4, 9);
        System.out.println(sb.toString());
    }

    public static void testInsert() {
        StringBuilder sb = new StringBuilder("The brown fox jumps over the lazy dog.");
        sb.insert(4, "quick ");
        System.out.println(sb.toString());
    }

    public static void testReverse() {
        StringBuilder sb = new StringBuilder("hello");
        sb.reverse();
        System.out.println(sb.toString());
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

根据如上内容写一段总结

  如上测试用例是一个Java类StringBuilderDemo,包含了5个静态方法,分别是testAppend、testReplace、testDelete、testInsert和testReverse。

  testAppend方法通过StringBuilder类的append方法向一个空StringBuilder对象中追加了两个字符串,最后输出StringBuilder中的字符串。

  testReplace方法通过StringBuilder类的replace方法替换了一段字符串,从第4个字符(下标从0开始)到第9个字符之间的内容替换为"slow",最后输出StringBuilder中的字符串。

  testDelete方法通过StringBuilder类的delete方法删除了一段字符串,从第4个字符到第9个字符之间的内容被删除,最后输出了StringBuilder中的字符串。

  testInsert方法通过StringBuilder类的insert方法向字符串中插入了一段内容,在第4个字符的位置插入了"quick ",最后输出StringBuilder中的字符串。

  testReverse方法通过StringBuilder类的reverse方法将字符串反转,最后输出StringBuilder中的字符串。

全文小结

  StringBuilder类是Java中一个重要的字符串操作类,它提供了多种操作方法,可以方便地进行字符串操作。与String类不同的是,StringBuilder类是可变的,可以在原有的字符序列上进行修改操作,避免了每次操作都创建新对象的问题。但是,StringBuilder类不是线程安全的,如果有多个线程同时对同一个StringBuilder对象进行操作,可能会出现并发问题。因此,在多线程环境下应该使用StringBuffer类代替StringBuilder类。

总结

  在实际开发中,对字符串进行操作是很常见的需求。使用StringBuilder类可以提高字符串的操作效率,避免了频繁创建新对象的问题。因此,在需要进行字符串操作的场景中应该优先选择使用StringBuilder类。同时,也要注意StringBuilder类的线程安全问题,根据具体的场景选择合适的类来操作字符串。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

***

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞