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

  今天我要给大家共享一些自己日常学习到的一些知识点,并以文字的办法跟大家一同交流,互相学习,一个人虽能够走的更快,但一群人能够走的更远。

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

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

前语

  在Java中,字符串是一种不可变的数据类型,也便是说,一旦创立了该字符串,就无法对其进行修正。可是,在实践开发中,我们常常需求对字符串进行拼接,删去和替换等操作。这就需求一个能够动态修正字符串的类。

摘要

  StringBuilder类能够了解为一个字符串缓冲区,它供给一个可变的字符序列,能够在该序列上进行修正操作,比方追加,刺进,删去和替换等。与String类不同的是,String类的修正操作每次都会创立一个新的字符串目标,而StringBuilder类的修正操作都是在原有的字符序列上进行的,不会创立新的目标,因此在频频进行字符串操作时,StringBuilder类的效率比String类高。

StringBuilder类

简介

  StringBuilder类位于Java.lang包中,是一个可变字符串类,它继承于AbstractStringBuilder类,实现了CharSequence, Appendable, Serializable等接口。StringBuilder的主要作用是用来处理字符串,供给一系列的操作办法,包括追加,刺进,删去和替换等。StringBuilder类适用于构建字符串的场景,能够进步字符串的操作效率。

源代码解析

下面是StringBuilder类的源代码:

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反常。

  如下是部分源码截图:

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

应用场景事例

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

  1. 字符串拼接
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();
    }
}

  依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。

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

  1. 替换操作
    //测验替换操作
    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();
    }

  依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。

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

  1. 删去操作
    //测验删去操作
    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();
    }

  依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。

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

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

  1. 刺进操作
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. 回转操作
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类的基本功能:

测验代码演示

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编程必备之StringBuilder类详解!

测验代码剖析

  依据如上测验用例,在此我给大家进行深化详细的解读一下测验代码,以便于更多的同学能够了解并加深印象。 依据如上内容写一段总结

  如上测验用例是一个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 !!!


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

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

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