JavaSE——常用API进阶一(3/3)-StringBuilder(构造器、拼接内容、反转操作、其他操作),StringBuffer,StringJoiner

简介: JavaSE——常用API进阶一(3/3)-StringBuilder(构造器、拼接内容、反转操作、其他操作),StringBuffer,StringJoiner

StringBuilder

  • StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的
  • 好处:StringBuilder比String更适合做字符串的修改操作,效率会更高,代码也会更简洁
构造器 说明
public StringBuilder() 创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str) 创建一个指定字符串内容的可变字符串对象

图片.png

以上都可以在API文档中查找到,列出的方法是比较常用的。

具体用法:

构造器

public class Test {
    public static void main(String[] args) {
 
        StringBuilder s = new StringBuilder(); //空白字符
        StringBuilder str = new StringBuilder("User");
    }
}

拼接内容

public class Test {
    public static void main(String[] args) {
 
        StringBuilder s = new StringBuilder(); //空白字符
        StringBuilder str = new StringBuilder("User");
 
        //1.拼接内容
        str.append(12);
        str.append("ok");
        str.append(true);
        System.out.println(str);
    }
}

运行结果:

append是支持链式编程的,也就是:

public class Test {
    public static void main(String[] args) {
 
        StringBuilder s = new StringBuilder(); //空白字符
        StringBuilder str = new StringBuilder("User");
 
        //链式编程
        s.append("汪汪").append("of").append("road");
        System.out.println(s);
    }
}

运行结果:

反转操作

public class Test {
    public static void main(String[] args) {
 
        StringBuilder s = new StringBuilder(); //空白字符
        StringBuilder str = new StringBuilder("User");
 
        //链式编程
        s.append("汪汪").append("of").append("road");
        System.out.println(s);
 
        System.out.println();
 
        //2.反转操作
        s.reverse();
        System.out.println(s);
    }
}

运行结果:

其他操作

public class Test {
    public static void main(String[] args) {
 
        StringBuilder s = new StringBuilder(); //空白字符
        StringBuilder str = new StringBuilder("User");
 
        //链式编程
        s.append("汪汪").append("of").append("road");
        System.out.println(s);
 
        //3.返回字符串长度
        System.out.println(s.length());
 
        //4.把StringBuilder对象又转换成String类型
        String rs = s.toString();
        System.out.println(rs);
    }
}

运行结果:



为什么操作字符串建议使用StringBuilder,而不是用原来学过的String呢?


  • 对于字符串相关的操作,如频繁的拼接、修改等,建议用StringBuidler,效率更高!
  • 注意:如果操作字符串较少,或者不需要操作,以及定义字符串变量,还是建议用String。


也就是像这种频繁的修改和拼接的操作,用String效率非常低:

public class Test {
    public static void main(String[] args) {
        String s = "";
        for (int i = 0; i < 1000000; i++) {
            s = s + "abc";
        }
        System.out.println(s);
    }
}

(运行时间仅作为参考)

运行时间:


用StringBuilder之后:

public class Test {
    public static void main(String[] args) {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < 1000000; i++) {
            s.append("abc");
        }
        System.out.println(s);
    }
}

运行时间:


接下来学习StringBuffer,

StringBuffer

案例展示

StringBuffer与StringBuilder

  • StringBuffer的用法与StringBuilder是一模一样的
  • 但StringBuilder是线程不安全的,StringBuffer是线程安全的。(线程安全是Java后面的内容)

用一个需求来展示一下StringBuffer的具体用法:

需求:

设计一个方法,用于返回任意整型数组的内容,要求返回的数组内容格式如:[ 11,22,33 ]

public class Test {
    public static void main(String[] args) {
 
        System.out.println(getArrayData(new int[]{11, 22, 33}));
 
    }
    public static String getArrayData(int[] arr){
        //第一步先要判断arr是否为null
        if(arr == null){
            return null;
        }
 
        //开始按需求格式输出
        StringBuffer s = new StringBuffer();
        s.append("[");
        for (int i = 0; i < arr.length; i++) {
            if ((i == arr.length - 1)) {
                s.append(arr[i]);
            } else {
                s.append(arr[i]).append(", ");
            }
        }
        s.append("]");
        return s.toString();
    }
}

运行结果:


我们发现,用String实现频繁的拼接效率极低,虽然用StringBuffer来实现效率提高了但是仍旧不够方便,对于一些格式化的输出,还是需要多次判断,不够方便。

StringJoiner就可以解决这个问题:

StringJoiner

  • JDK8开始才有的,跟StringBuilder一样,也是用来操作字符串的,也可以看成是一个容器,创建之后里面的内容是可变的。
  • 好处:不仅能提高字符串的操作效率,并且在有些场景下使用它操作字符串,代码会更简洁。

构造器及常用方法 图片.png

案例展示

我们用StringJoiner去实现上一个案例,

需求:

设计一个方法,用于返回任意整型数组的内容,要求返回的数组内容格式如:[ 11,22,33 ]

public class Test {
    public static void main(String[] args) {
 
        System.out.println(getArrayData(new int[]{11, 22, 33}));
    }
    public static String getArrayData(int[] arr){
        //第一步先要判断arr是否为null
        if(arr == null){
            return null;
        }
 
        //开始按需求格式输出
        StringJoiner s = new StringJoiner(",","[","]");
        for (int i = 0; i < arr.length; i++) {
            String rs = Integer.toString(arr[i]); //将基本类型的数据转换成字符串类型
            s.add(rs);   //添加该字符串数据并返回对象
            //或者使用自动类型转换
            //s.add(arr[i] + "");
        }
        return s.toString();
    }
}

运行结果是一样的:



END



目录
相关文章
|
3月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
64 1
|
2月前
|
安全 Java
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
|
1月前
|
canal 安全 索引
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
33 5
|
21天前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
13 0
|
2月前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
|
3月前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
3月前
|
安全 Java
【Java基础面试二十七】、说一说StringBuffer和StringBuilder有什么区别
这篇文章介绍了Java中StringBuffer和StringBuilder的区别:StringBuffer是线程安全的,而StringBuilder是非线程安全的,因此在单线程环境下优先推荐使用StringBuilder以获得更好的性能。
|
3月前
|
安全
String,Stringbuffer,StringBuilder的区别
【8月更文挑战第16天】String,Stringbuffer,StringBuilder的区别
35 2
|
3月前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
146 0
|
3月前
|
缓存 安全 Java
【揭秘】String vs StringBuilder vs StringBuffer:三大字符串类的秘密较量!你真的知道何时该用哪个吗?
【8月更文挑战第19天】探讨Java中`String`、`StringBuilder`与`StringBuffer`的区别及应用场景。`String`不可变,适合做哈希表键或多线程共享。`StringBuilder`支持动态修改字符串,适用于单线程环境以提高性能。`StringBuffer`与`StringBuilder`功能相似,但线程安全。示例代码展示各类型的基本用法。选择哪种类型取决于具体需求和性能考量。
50 0

热门文章

最新文章