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月前
|
文字识别 小程序 安全
印刷文字识别操作报错合集之微信小程序调用API时路径总是返回不对,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
3月前
|
文字识别 前端开发 API
印刷文字识别操作报错合集之通过HTTPS连接到OCR服务的API时报错,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
3月前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之调用CreateQualityRule API时,BlockType参数为0,会报错:"blockType less than minimum",该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
前端开发 JavaScript API
惊天揭秘!AJAX与Fetch API如何让你的前后端交互秒变‘神级操作’!
【7月更文挑战第15天】在Web开发中,AJAX和Fetch API革新了前后端交互,告别了表单提交带来的页面刷新。AJAX利用XMLHttpRequest实现部分页面更新,开启无刷新时代;Fetch API作为现代替代,以其简洁和Promise支持简化异步操作。从AJAX的先驱地位到Fetch API的进化,两者提升了Web应用的性能和用户体验,成为现代开发的必备技能。
41 2
|
3月前
|
搜索推荐 API UED
资源部署及场景API调用体验过程的引导与操作流畅性
资源部署及场景API调用体验过程的引导与操作流畅性
|
3月前
|
XML JSON 文字识别
印刷文字识别操作报错合集之API调用过程中报错469,是什么导致的
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
4月前
|
运维 DataWorks 数据管理
DataWorks操作报错合集之调用RegisterLineageRelation api时报错,是什么原因?
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
32 2
|
4月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
4月前
|
存储 缓存 Java
JavaSE 字符串String及相关API StringBuilder StringJoiner 底层原理 详解
JavaSE 字符串String及相关API StringBuilder StringJoiner 底层原理 详解
37 2
|
3月前
|
运维 Devops API
阿里云云效操作报错合集之直接用API调用可以使用,但是本地用Go代码调用失败,是什么导致的?
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。