StringBuilder
是 Java 中的一个类,属于 java.lang
包,它用于创建可变的字符序列。相比于 String
类,StringBuilder
提供了更高效的字符串操作,特别是在需要频繁修改字符串内容时。以下是 StringBuilder
的全面介绍:
基本概念
- 可变性:
StringBuilder
对象是可变的,这意味着对其进行的修改(如添加、删除、插入字符)不会创建新的对象,而是直接在原对象上进行操作。 - 性能:由于
StringBuilder
不会像String
那样频繁创建新的对象,所以在进行大量字符串拼接或修改操作时,性能比String
高。
构造方法
-
无参构造方法:创建一个初始容量为 16 的
StringBuilder
对象。StringBuilder sb = new StringBuilder();
-
指定初始容量的构造方法:创建一个具有指定初始容量的
StringBuilder
对象。StringBuilder sb = new StringBuilder(int capacity);
-
通过字符串初始化的构造方法:使用指定字符串初始化
StringBuilder
对象。StringBuilder sb = new StringBuilder(String str);
常用方法
-
append:追加字符串到当前
StringBuilder
对象的末尾。sb.append("Hello"); sb.append(123);
-
insert:在指定位置插入字符串。
sb.insert(0, "Start ");
-
delete:删除指定范围内的字符。
sb.delete(0, 5);
-
deleteCharAt:删除指定位置的字符。
sb.deleteCharAt(0);
-
replace:替换指定范围内的字符。
sb.replace(0, 5, "Hi");
-
reverse:将字符序列进行反转。
sb.reverse();
-
setCharAt:修改指定位置的字符。
sb.setCharAt(0, 'H');
-
substring:返回指定范围内的子字符串。
String sub = sb.substring(0, 5);
-
capacity:返回当前
StringBuilder
对象的容量。int cap = sb.capacity();
-
length:返回当前
StringBuilder
对象的长度(字符数)。int len = sb.length();
-
ensureCapacity:确保
StringBuilder
具有最小的容量。sb.ensureCapacity(50);
-
trimToSize:调整
StringBuilder
的容量使其等于字符序列的长度。sb.trimToSize();
优点
- 高效的字符串操作:由于内部使用可变字符数组存储字符序列,
StringBuilder
在执行字符串拼接、插入、删除等操作时,性能明显优于String
。 - 线程不安全:
StringBuilder
是非线程安全的,即不支持多线程环境下的并发操作,但在单线程环境中效率较高。如果需要线程安全的操作,可以使用StringBuffer
类。
示例代码
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString()); // 输出:Hello World
sb.insert(5, ",");
System.out.println(sb.toString()); // 输出:Hello, World
sb.delete(5, 6);
System.out.println(sb.toString()); // 输出:Hello World
sb.replace(6, 11, "Java");
System.out.println(sb.toString()); // 输出:Hello Java
sb.reverse();
System.out.println(sb.toString()); // 输出:avaJ olleH
System.out.println("Capacity: " + sb.capacity()); // 输出当前容量
System.out.println("Length: " + sb.length()); // 输出当前长度
}
}
总结
StringBuilder
在需要频繁修改字符串内容的情况下提供了一种高效的解决方案。通过其丰富的方法,可以方便地进行字符串的追加、插入、删除、替换等操作。与 StringBuffer
类似,但 StringBuilder
是非线程安全的,适用于单线程环境中的高效字符串操作。