前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >入门Java编程必备之StringBuilder类详解!

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

原创
作者头像
喵手
发布2023-11-20 11:18:24
4970
发布2023-11-20 11:18:24
举报
文章被收录于专栏:Java进阶实战Java进阶实战

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • StringBuilder类
    • 简介
      • 源代码解析
        • 应用场景案例
          • 优缺点分析
            • 优点:
            • 缺点:
          • 类代码方法介绍
            • 测试用例
              • 测试代码演示
              • 测试结果
              • 测试代码分析
            • 全文小结
            • 总结
            • 文末
            相关产品与服务
            腾讯云代码分析
            腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档