StringBuilder的基本操作

1、为什么要学习StringBuilder?

1.1、String拼接100万次

  • String对象做字符串拼接,字符串直接拼接100万次,运行速度非常非常的慢,当数据量比较大的时候,一般不用字符串直接拼接
java 复制代码
package stringdemo;

public class StringTest {
    public static void main(String[] args) throws InterruptedException {
        long begin = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < 1000000; i++) {
            s = s + "abc";
        }
        System.out.println(s);
        long end = System.currentTimeMillis();
        System.out.println(String.valueOf(end - begin));
    }
}

1.2、StringBuilder 拼接100万次

java 复制代码
package stringdemo;

public class StringTest {
    public static void main(String[] args) throws InterruptedException {
        long begin = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder("");
        for (int i = 0; i < 1000000; i++) {
            sb.append("abc");
        }
        System.out.println(sb);
        long end = System.currentTimeMillis();
        System.out.println(String.valueOf(end - begin));
    }
}

2、StringBuilder概述

  • StringBuilder可以看成是一个 容器 ,创建之后里面的 内容是可变的

2.1、作用

  • 提高字符串的操作效率

2.2、StringBuilder构造方法

  • java在底层对它做了一些特殊处理,打印对象不是地址值而是 属性值 。
方法名 说明
* public StringBuilder() * 创建一个空白可变字符串对象,不含有任何内容
* public StringBuilder(String str) * 根据字符串的内容,来创建可变字符串对象

2.3、StringBuilder常用方法

方法名 说明
* public StringBuilder append(任意类型) * 添加数据,并返回对象本身
* public StringBuilder reverse() * 反转容器中的内容
* public int length() * 返回长度(字符出现的个数)
* public String toString() * 通过toString()就可以实现把StringBuilder转换为String
java 复制代码
package stringdemo;

public class StringBuilderTest {
    public static void main(String[] args) throws InterruptedException {
        StringBuffer sb = new StringBuffer("abc");

        sb.append(1);
        sb.append(2.3);
        sb.append(true);
        System.out.println(sb);//abc12.3true

        sb.reverse();
        System.out.println(sb);//eurt3.21cba

        int length = sb.length();
        System.out.println(length);//11

        String string = sb.toString();
        System.out.println(string);//eurt3.21cba
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2315:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBuilderTest
abc12.3true
eurt3.21cba
11
eurt3.21cba

Process finished with exit code 0

2.4、链式编程

  • 当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法
java 复制代码
package stringdemo;

public class StringBuilderTest {
    public static void main(String[] args) throws InterruptedException {

        StringBuffer sb = new StringBuffer();

        sb.append("aaa").append("bbb").append("ccc").append("ddd");

        System.out.println(sb);

        String str = sb.toString();
        System.out.println(str);
    }

}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=23088:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBuilderTest
aaabbbcccddd
aaabbbcccddd

Process finished with exit code 0

3、使用StringBuilder的场景

  1. 字符串的 拼接
  2. 字符串的 反转

4、练习-对称字符串

  • 需求:键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是
java 复制代码
package stringdemo;

import java.util.Scanner;

public class StringBuilderTest {
    public static void main(String[] args) throws InterruptedException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();

        StringBuilder sb = new StringBuilder();
        sb.append(str);
        sb.reverse();
        String string = sb.toString();
        System.out.println(string);

        if (str.equals(string)) {
            System.out.println("当前字符串是对称字符串");
        } else {
            System.out.println("当前字符串不是对称字符串");
        }
    }


}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2263:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBuilderTest
请输入一个字符串
123321
123321
当前字符串是对称字符串

Process finished with exit code 0

5、练习-拼接字符串

  • 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回。调用该方法,并在控制台输出结果。
java 复制代码
package stringdemo;

public class StringBuilderTest {
    public static void main(String[] args) throws InterruptedException {
        int[] arr = {1, 2, 3};
        String str = arrToString(arr);
        System.out.println(str);
    }

    public static String arrToString(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }

}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2229:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringBuilderTest
[1, 2, 3]

Process finished with exit code 0
相关推荐
秃头佛爷1 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
阿伟*rui1 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
待磨的钝刨1 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei3 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师4 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉4 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer4 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端