字符串---StringBuilder的使用
Java中的StringBuilder
类是一个可变的字符序列,用于高效处理字符串的拼接、修改等操作。
其实就是类似于String对象,可以将String变成StringBuilder,用于一些特定场合,使得字符串的一些功能性能变强;
以下是其核心知识点的详细阐述:
1. 概述
- 可变性:与不可变的
String
不同,StringBuilder
允许直接修改内部字符数组,避免频繁创建新对象。 - 性能优势:适用于大量字符串操作的场景(如循环拼接),比
String
的+
操作更高效。 - 线程不安全:非线程安全,但因此性能优于线程安全的
StringBuffer
。
简答来说一句话,他就是增强版的String对象;
但注意:
StringBuilder只适合用高效率的拼接和翻转字符串,而且他也没提供啥其他好的方法,因此,也别处处都用它;
2. 构造方法
方法 | 说明 |
| 初始容量为16的空实例 |
| 指定初始容量的空实例 |
| 用指定字符串初始化,容量为 |
// 空构造,默认容量16
StringBuilder sb1 = new StringBuilder();// 指定初始容量
StringBuilder sb2 = new StringBuilder(20);// 用字符串初始化
StringBuilder sb3 = new StringBuilder("Hello");
3. 核心方法
追加内容:append()
- 重载方法支持所有基本类型、
String
、Object
等:
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(123).append(true); // 链式调用
System.out.println(sb.toString());
//Hello123true
- 自动扩容,返回
this
对象。
插入内容:insert()
- 在指定位置插入数据:
StringBuilder sb = new StringBuilder();// 在索引5处插入
sb.append("Hello").append(123).append(true);
sb.insert(5, " World");
System.out.println(sb.toString());
//Hello World123true
删除内容:delete()
& deleteCharAt()
delete(int start, int end)
:删除子序列(左闭右开)。deleteCharAt(int index)
:删除指定位置字符。
替换内容:replace()
- 替换指定区间的字符:
StringBuilder sb = new StringBuilder();// 替换索引0-4的内容为"Hi"
sb.append("Hello").append(123).append(true);
sb.replace(0, 5, "Hi");
System.out.println(sb.toString());
//Hi123true
反转字符串:reverse()
- 反转字符序列:
sb.reverse(); // "Hello" → "olleH"
变回字符串:toString()
- StringBuilder毕竟只是容器,他并不是字符串本串,你总得把人家变回去吧
String str = sb.toString();
链式调用:
String result = new StringBuilder().append("One").insert(3, "Two").reverse().toString();System.out.println(result); // 输出: enoT
其他方法
length()
:返回字符数。capacity()
:返回当前容量。setLength(int len)
:设置字符序列长度,可能截断或填充空字符。trimToSize()
:释放多余容量,减少内存占用。
4. 容量管理
- 默认扩容:当字符数超过容量时,新容量为
原容量*2 + 2
,或直接扩容到所需长度(取两者较大者)。 - 预分配优化:若已知大致长度,初始化时指定容量可避免频繁扩容:
StringBuilder sb = new StringBuilder(100); // 初始容量100
适合的场景:StringBuilder
适合频繁修改字符串的场景)。与不可变的 String
不同,StringBuilder
直接修改内部字符数组,避免频繁创建新对象,性能更高;
非线程安全:StringBuilder
不保证线程安全,多线程环境下需改用 StringBuffer
;