UM2L12——StringBuilder

本章代码关键字

1
2
3
4
stringBuilder.append()        //添加字符串
stringBuilder.insert() //在指定索引处插入字符串
stringBuilder.delete() //删除指定范围内的字符串
stringBuilder.toString() //将stringBuilder转换为字符串

StringBuilder

Java中的StringBuilder​和C#基本一致,主要是用于处理会频繁修改的字符串的
如果你的字符串变量会频繁被修改,建议使用StringBuilder​可以帮助我们节约性能

StringBuilder节约性能的体现

下面的代码会分别输出String​字符串拼接10000次和StringBuilder​字符串拼接10000次所消耗的时间(单位:毫秒):

1
2
3
4
5
6
7
8
9
10
11
12
13
String str = new String("");
long startTime = System.currentTimeMillis();
for(int i = 0; i < 10000; ++i)
str += i;
long endTime = System.currentTimeMillis();
System.out.println("String拼接消耗的时间:" + (endTime - startTime));

StringBuilder strBuilder = new StringBuilder("");
startTime = System.currentTimeMillis();
for(int i = 0; i < 10000; ++i)
strBuilder.append(i);
endTime = System.currentTimeMillis();
System.out.println("StringBuilder拼接消耗的时间:" + (endTime - startTime));

输出:

1
2
String拼接消耗的时间:57
StringBuilder拼接消耗的时间:1

从这个例子可以对比出,在频繁修改字符串时,使用StringBuilder​效率会高很多

同时,由于StringBuilder​会在长度足够大时才扩容一次,
因此,频繁修改StringBuilder​产生的垃圾也少于直接修改字符串

StringBuilder中的常用方法

  1. 初始化构造函数

    1
    StringBuilder stringBuilder = new StringBuilder("");
  2. 拼接字符串 append(内容)

    1
    2
    3
    StringBuilder stringBuilder = new StringBuilder("");
    stringBuilder.append(1);
    stringBuilder.append("123123123");
  3. 插入字符串 insert(位置,内容)

    1
    2
    3
    4
    5
    StringBuilder stringBuilder = new StringBuilder("");
    stringBuilder.append(1);
    stringBuilder.append("123123123");
    stringBuilder.insert(1, "唐老狮");
    System.out.println(stringBuilder);

    输出:

    1
    1唐老狮123123123
  4. 删除指定字符 delete(开始位置,结束位置)

    删除的内容为 开始位置 ~ 结束位置-1​,删除同样是左包含而右不包含的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    StringBuilder stringBuilder = new StringBuilder("");
    stringBuilder.append(1);
    stringBuilder.append("123123123");
    String string = stringBuilder.toString();
    System.out.println(stringBuilder);
    stringBuilder.insert(1, "唐老狮");
    System.out.println(stringBuilder);
    stringBuilder.delete(1, 4);
    System.out.println(stringBuilder);

    输出:

    1
    2
    1唐老狮123123123
    1123123123
  5. 转为 String

    打印时其实不需要刻意执行一次toString()​,因为控制台输出会自动转换为字符串

    1
    2
    3
    4
    5
    StringBuilder stringBuilder = new StringBuilder("")
    stringBuilder.append(1);
    stringBuilder.append("123123123");
    String string = stringBuilder.toString();
    System.out.println(string);

    输出:

    1
    1123123123