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



目录
相关文章
|
14天前
|
Java API
JavaSE——常用API进阶二(6/8)-ZoneId、ZoneDateTime、Instant(常见方法、用法示例)
JavaSE——常用API进阶二(6/8)-ZoneId、ZoneDateTime、Instant(常见方法、用法示例)
14 1
|
10天前
|
分布式计算 DataWorks API
DataWorks操作报错合集之如何解决API调用报400,文件夹找不到的错误
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
8天前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
49 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
10天前
|
JavaScript 关系型数据库 Serverless
Serverless 应用引擎操作报错合集之在调用stable Diffusion函数计算api接口返回,报错:"Not Found"一般是什么原因
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
14天前
|
存储 Java API
JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)
JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)
16 2
|
14天前
|
安全 Java API
JavaSE——常用API进阶二(7/8)-DateTimeFormatter、Period、Duration(常见方法、用法示例)
JavaSE——常用API进阶二(7/8)-DateTimeFormatter、Period、Duration(常见方法、用法示例)
26 2
|
14天前
|
安全 Java API
JavaSE——常用API进阶二(5/8)-JDK 8新增的时间API,LocalDate、LocalTime、LocalDateTime
JavaSE——常用API进阶二(5/8)-JDK 8新增的时间API,LocalDate、LocalTime、LocalDateTime
15 2
|
10天前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之调用ListInstances API时报错:ServiceUnavailable The request has failed due to a temporary failure of the server.是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
7天前
|
安全 数据挖掘 API
【实时数据】商品详情API接口系列开发
商品详情API接口系列对于电商平台至关重要,它们为开发者提供了实时、准确的商品信息,使得在线销售和展示商品变得更加高效和精准。以下是几个主要的电商平台及其商品详情API接口的介绍:
|
1天前
|
存储 前端开发 安全
Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口
这篇文章介绍了如何使用Supabase实现RESTful风格的API接口,用于网站分类和子站点的增删改查(CURD)功能。文章首先阐述了表设计,包括ds_categorys和ds_websites两张表的列名、类型和用途,并提到了为每张表添加的user_id和email字段以支持用户身份识别。接着,文章描述了接口设计,以ds_websites表为例,说明了如何通过RESTful API实现CURD功能,并给出了使用SupabaseClient实现插入数据的相关代码。文章最后提供了项目效果预览和总结,指出学习了Nuxt3创建接口及调用Supabase数据库操作。
Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口