StringBuilder(字符串的构造器)

StringBuilder:字符串的构造器,作用专门构建字符串的,可以构建一个长度可变的字符串
字符串拼接通过 + 号进行,但是如果进行大量字符串拼接,则会导致性能特别差
comparable (可比较的)底层构造方法中长度默认16
如下:

public static void main(String[] args) {
        //获取当前系统时间的 时间戳(毫秒数 距离1970-01-01 0:0:0 )
        String str = "";

        long start = System.currentTimeMillis();

        for (int i = 0; i < 1000000; i++) {
            str += i;
        }
        long end = System.currentTimeMillis();
       
        System.out.println(end - start);
    }

构造方法
StringBuilder()
构造一个没有字符的字符串生成器,并构造了16个字符的初始容量。
StringBuilder(CharSequence seq)
构建一个包含指定的 CharSequence相同字符的字符串生成器。
StringBuilder(int capacity)
构造一个字符串生成器没有字符和一个初始容量的 capacity参数指定。
StringBuilder(String str)
构造一个初始化为指定字符串的内容的字符串生成器。

StringBuilder的几种构建方式

//创建一个stringbuilder 对象
        StringBuilder sb = new StringBuilder();//"";构建的是一个空字符串
        //构建一个内容为 abc 的stringbuilder 对象
        //如何将一个字符串转成 StringBuilder 
        sb = new StringBuilder("abc");
		//创建一个stringbuilder 对象的基础上再进行构建使用
        StringBuilder sb2 = new StringBuilder(sb);
        System.out.println(sb.length());
        System.out.println(sb2);

特点

  • 可变字符串,高效拼接字符串
  • 支持廉耻操作
  • 线程不安全

方法

  • substring()
    截取字符串
  • append()
    追加内容
  • insert()
    在指定位置添加内容
  • replace(start, end, str)
    将start - end位置的字符串替换为 str
  • delete(start, end)
    删除 区间内的字符串
  • deleteCharAt(index)
    删除指定索引对应的字符串
  • indexOf / lastIndexOf
    获取某个字符串的索引位置
  • reverse()
    反转字符串
  • substring(start , end)
    截取字符串、返回String
  • isEmpty()
    判断是否为空
  • length()
    获取字符串长度
  • toString()
    转字符串

append方法

  • append(Object obj) ----可以追加任意数据类型
  • 整个过程只构建一个对象 ,自动追加
StringBuilder sb = new StringBuilder();
        sb.append("hello");
        sb.append("world");
        System.out.println(sb);
        //结果:helloworld

indexOf方法

  • indexOf(String str)
    返回指数在这个字符串指定的子字符串中第一个出现的。
  • int indexOf(String str, int fromIndex)
    返回此字符串的指定子字符串中第一个出现在索引中,从指定索引处开始。
StringBuilder sb = new StringBuilder();
        sb.append("hello");
        sb.append("world");

        //查找字符串中 he 这个字符串出现的次数
        int count = 0,index = -1 ;

        while (true){
            index = sb.indexOf("he",index + 1);
            if (index == -1)break;
            count ++;
        }
        System.out.println(count);

reverse() 方法

  • 反转字符串(断除法的使用就是)
String tset = "abc";
        System.out.println(new StringBuilder(tset).reverse().toString());

StringBuilder和StringBuffer区别

StringBuilder不安全的实例用于多个线程。如果需要同步然后建议StringBuffer可用。
StringBuffer 用法和 StringBuilder 用法一样
StringBuffer 是线程安全的,速度比较慢,会产生阻塞的问题
StringBuilder 是线程不安全的,在多线程环境下,使用的时候需要注意,速度比 StringBuffer 快(平常更多使用StringBuilder)