【JAVA基础】*StringBuffer*:字符串的兄弟,你认识吗?

简介: 学习了解*StringBuffer*:字符串的兄弟。

一、StringBuffer 介绍


java.lang包下的StringBuffer类,代表着可变的字符序列,可以用来对字符串内容进行增删改操作。同时它是线程安全的,效率称不上高。


StringBuffer类当中的许多方法都是与String相同的,是字符串相关的类,所以我称他为字符串的兄弟…。但是两兄弟也有本质的区别,String是不可变的字符序列


二、方法详解


1.构造方法


当我们想要创建StringBuffer类型的对象,必须要使用到构造方法来生成,不同于String类型的可以直接用常量赋值。


接下来就让我来介绍一下StringBuffer的三个构造方法:


①StringBuffer()

使用空参构造方法来创建StringBuffer对象,在底层会得到一个初始化容量大小为 16

的字符换缓冲区,而且这个长度是可以不断扩容的,这也体现了可变字符序列的特性。

StringBuffer stringbuffer = new StringBuffer();

②StringBuffer(int size)

当我们需要创建StringBuffer对象时,可以在括号内指定一个大小,从而获得一个指定长度的字符串缓冲区。

比如我们将整数8作为参数传入就能在底层初始化一个容量为8的字符串缓冲区。

StringBuffer stringbuffer = new StringBuffer();


③StringBuffer(String str)

创建StringBuffer对象时,借助构造方法,我们还可以创建一个包含内容的可变字符串序列,只需要将想要的内容作为字符串传入即可;


我们可以传入一个String类型的对象传入:

String a = "abcd";
StringBuffer sb_1 = new StringBuffer(a);


也可以直接传入一个字符串常量:


StringBuffer sb_2 = new StringBuffer("abcd");

1


效果案例:

/**
 * @author .29.
 * @create 2022-10-07 19:04
 */
public class StringBufferTest {
    public static void main(String[] args) {
        String a = "abcd";
        StringBuffer sb_1 = new StringBuffer(a);
        StringBuffer sb_2 = new StringBuffer("abcd");
        System.out.println(sb_1.toString());
        System.out.println(sb_2.toString());
    }
}

微信图片_20221030195106.png

2.增 StringBuffer append(…)


StringBuffer类中提供了许多append()方法,可以用来对字符串进行拼接操作,我们可以来看一看:

微信图片_20221030195112.png


通过上述列出来的实例中,我们可以知道,append()方法中,除了String类型外,无论是整形(int,long)、浮点型(float,double),还是布尔类型(boolean)也都可以作为参数传入的。


效果案例:

/**
 * @author .29.
 * @create 2022-10-07 19:04
 */
public class StringBufferTest {
    public static void main(String[] args) {
        StringBuffer sb_3 = new StringBuffer();
        int A = 29;
        long B = 29L;
        float C = 2.9f;
        double D = 29.29;
        boolean E = true;
        sb_3.append(A);
        sb_3.append(" ");
        sb_3.append(B);
        sb_3.append(" ");
        sb_3.append(C);
        sb_3.append(" ");
        sb_3.append(D);
        sb_3.append(" ");
        sb_3.append(E);
        System.out.println(sb_3.toString());
    }
}

微信图片_20221030195121.png

3.删 StringBuffer delete(int start,int end)


delete(int start,int end)方法可以用来删除指定位置的元素,删除元素的位置从start参数开始,到end参数前一个位置结束。


效果案例:

/**
 * @author .29.
 * @create 2022-10-07 19:04
 */
public class StringBufferTest {
   public static void main(String[] args) {
   StringBuffer sb_3 = new StringBuffer("0123456789");
      sb_3.delete(0,6);
      System.out.println(sb_3.toString());
   }
}

我们指定从删除的位置从下标0开始,到下标6前一个位置结束:

微信图片_20221030195132.png


4.改 StringBuffer replace(int start,int end,String str)


这是将指定位置内容替换成指定内容的方法replace(int start,int end,String str),替换的位置依旧是从start下标开始,到end下标的前一个位置结束,也就是[start , end)


效果案例:

/**
 * @author .29.
 * @create 2022-10-07 19:04
 */
public class StringBufferTest {
    public static void main(String[] args) {
        StringBuffer sb_3 = new StringBuffer("0123456789");
        System.out.println(sb_3.toString());
        sb_3.replace(1,9,"        ");
        System.out.println(sb_3.toString());
        sb_3.replace(1,9,"asdfghjkl");
        System.out.println(sb_3.toString());
    }
}


需要注意的是,此方法不是将指定位置内容完全由指定内容填充,而是直接将原本的内容替换成传入的指定内容,是可以造成下标位置变化的。

微信图片_20221030195139.png



5.插入 StringBuffer insert(int offset, · · · )


使用insert(int offset , · · · )方法时,我们可以在指定下标位置的前面插入指定的内容,而内容对象的类型并不唯一,类似于上文将结果的append()方法中的参数。


效果案例:

/**
 * @author .29.
 * @create 2022-10-07 19:04
 */
public class StringBufferTest {
    public static void main(String[] args) {
        StringBuffer sb_3 = new StringBuffer("0123456789");
        sb_3.insert(0,"a");
        System.out.println(sb_3.toString());
        sb_3.insert(1,"b");
        System.out.println(sb_3.toString());
        sb_3.insert(2,"c");
        System.out.println(sb_3.toString());
        sb_3.insert(3,"d");
        System.out.println(sb_3.toString());
        sb_3.insert(4,"e");
        System.out.println(sb_3.toString());
        sb_3.insert(5,"f");
        System.out.println(sb_3.toString());
        sb_3.insert(6,"g");
        System.out.println(sb_3.toString());
    }
}

微信图片_20221030195148.png

5.反转 StringBuffer reverse()


reverse()方法可以将当前字符串序列的先后顺序反转过来,是十分常用的方法:


效果案例:

/**
 * @author .29.
 * @create 2022-10-07 19:04
 */
public class StringBufferTest {
    public static void main(String[] args) {
    StringBuffer sb_3 = new StringBuffer("0123456789");
     System.out.println(sb_3.toString());
    sb_3.reverse();
        System.out.println(sb_3.toString());
    }
}

微信图片_20221030195157.png

⚽求关注⚽ 作者🥇 .29. 🥇 的✔博客主页✔

⚽来刷题⚽ 记录每日LeetCode✔刷题专栏✔

您的点赞,收藏以及关注是对作者最大的鼓励喔 ~~


微信图片_20221029111446.jpg

目录
相关文章
|
1天前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4天前
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
6天前
|
前端开发 JavaScript Java
【前端学java】详解java中的字符串操作(11)
【8月更文挑战第10天】详解java中的字符串操作
11 3
【前端学java】详解java中的字符串操作(11)
|
4天前
|
Java API 开发者
|
6天前
|
人工智能 Java 容器
十个Java字符串操作示例程序
十个Java字符串操作示例程序
6 1
|
7天前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
25 1
|
8天前
|
存储 JavaScript Java
Java中未被初始化的字符串打印出“null”?
在Java中,未初始化的`String`变量默认值为`null`。打印此类变量时输出“null”,是因为`PrintStream`类中的`print`方法特别处理了`null`值,将其转换为字符串“null”。从JDK 17开始,`println`方法通过`String.valueOf`间接实现相同功能。当拼接包含`null`的字符串时,如`s1 + "BLACK"`,结果为“nullBLACK”,这是因为字符串构建过程中`StringBuilder`的`append`方法将`null`转换为“null”。
|
1天前
|
缓存 安全 Java
【揭秘】String vs StringBuilder vs StringBuffer:三大字符串类的秘密较量!你真的知道何时该用哪个吗?
【8月更文挑战第19天】探讨Java中`String`、`StringBuilder`与`StringBuffer`的区别及应用场景。`String`不可变,适合做哈希表键或多线程共享。`StringBuilder`支持动态修改字符串,适用于单线程环境以提高性能。`StringBuffer`与`StringBuilder`功能相似,但线程安全。示例代码展示各类型的基本用法。选择哪种类型取决于具体需求和性能考量。
|
6天前
|
Java
Java中 字符串,字符串数组,整型数组初始化
Java中 字符串,字符串数组,整型数组初始化
6 0