StringBuilder、StringBuffer

2023-12-28 19:19:30

StringBuilder

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

public StringBuilder ( String str )

创建一个指定字符串内容的可变字符串对象
构造器说明
public StringBuilder append ( 任意类型 )添加数据并返回StringBuilder对象本身
public StringBuilder reverse ( )将对象的内容反转
public int length ( )返回对象内容的长度
public String toString ( )通过toString()就可以实现把StringBuilder转换为String
public class Test {
    public static void main(String[] args) {
        // 目标:搞清StringBuilder的用法和作用
        StringBuilder s = new StringBuilder("abcd");

        // 拼接内容
        s.append(11);
        s.append("qwer");
        s.append(true);
        // 支持链式编程
        s.append(666).append("wwwww").append("123");
        System.out.println(s);

        // 反转操作
        s.reverse();
        System.out.println(s);

        // 返回字符串长度
        System.out.println(s.length());

        // 把StringBuilder对象又转换成String类型
        String rs = s.toString();
        System.out.println(rs);
    }
}

为什么操作字符串建议使用StringBuilder,而不用String

public class Test {
    public static void main(String[] args) {
        // 目标:搞清StringBuilder的好处
        // 需求:需要拼接100万次的abc
        // 先用String测试
        String rs = "";
        for (int i = 1; i <= 1000000; i++) {
            rs = rs + "abc";
        }
        System.out.println(rs);
    }
}
public class Test {
    public static void main(String[] args) {
        // 目标:搞清StringBuilder的好处
        // 需求:需要拼接100万次的abc
        // 使用StringBuilder
        StringBuilder s = new StringBuilder();
        for (int i = 1; i <= 1000000; i++) {
            s.append("abc");
        }
        System.out.println(s);
    }
}

????????如果使用String来完成这个任务的话,要等到结果需要较长的时间,因为String类型的每次添加abc的时候都会创建一个新的对象导致效率非常的慢。使用StringBuilder时就可以避免这个问题,差不多1~2秒的时间就可以得出结果。

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

StringBuffer

StringBuilder与StringBuffer

注意:

  • StringBuilder的用法与StringBuffer是一模一样的
  • 但StringBuilder是线程不安全的,StringBuffer是线程安全的

案例:返回任意整形数组的内容

public class Test {
    public static void main(String[] args) {
        // 目标:完成数组遍历,并拼接成指定格式
        int[] arr = new int[]{11,22,33};
        System.out.println(getArrayData(arr));
    }

    public static String getArrayData(int[] arr){
        // 判断数组是否为null
        if (arr == null){
            return null;
        }
        StringBuilder s = new StringBuilder();
        s.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length-1){
                s.append(arr[i]).append(", ");
            }else {
                s.append(arr[i]);
            }
        }
        s.append("]");
        String rs = s.toString();
        return rs;
    }
}

?

StringJoiner

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

public class Test {
    public static void main(String[] args) {
        // 目标:掌握StringJoiner的使用
        //StringJoiner s = new StringJoiner(", "); // 间隔符 输出:java1, java2, java3
                                     //间隔符 开始符 结束符
        StringJoiner s = new StringJoiner(", ","[","]"); //输出:[java1, java2, java3]
        s.add("java1");
        s.add("java2");
        s.add("java3");
        System.out.println(s);
    }
}

文章来源:https://blog.csdn.net/SU_mu147/article/details/135246765
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。