类似于String,但可变。
一般,能使用String的地方就能使用StringBuilder和StringBuffer。可以给一个StringBuilder或StringBuffer中添加、插入或追加新的内容。
StringBuilder和StringBuffer区别:
StringBuffer 类中修改缓冲区的方法是同步(同一时间只能有一个任务来修改访问)的,这意味着只有一个任务被允许执行该方法,除此之外两者非常类似
如果是多任务并发访问,就使用StringBuffer,因为这种情况下需要同步以防止StringBuffer损坏.
如果是单任务访问,使用StringBuilder会更有效。
构造器 | 描述 |
StringBuilder() | 构建一个容量为16的空字符串构建器 |
StringBuilder(capacity:int) | 构建一个指定容量的字符串构建器 |
StringBuilder(s:String) | 构建一个指定字符串的字符串构建器 |
方法 | 描述 |
append(data:char[]):StringBuilder | 追加一个字符数组到字符串构建器 |
append(data:char[], offset:int, len:int):StringBuilder | 追加data中的子数组到字符串构建器 |
append(v:aPrimitiveType): StringBuilder | 将一个基本类型值作为字符串追加到字符串构建器 |
append(s: Sting):StringBuilder | 追加一个字符串到字符串构建器 |
delete(starIndex:int, endIndex:int): StringBuilder | 删除从startIndex到endIndex-1的字符 |
deleteCharAt(index: int): StringBuilder | 删除给定下标位置的字符 |
insert(index:int, data:char[], offset:int, len:int):StringBuilder | 在字符串构建器的给定下标位置插入数组data的子数组 |
insert(offset:int, data:char[]):StringBuilder | 向构建器的offset位置插入data |
insert(offset:int, aPrimitiveType): StringBuilder | 向该字符串构建器插入一个转换为字符串的值 |
insert(offset:int,s:String): StringBuilder | 在该构建器指定的offset位置插入一个字符串 |
replace(startIndex:int, endIndex:int, s: String): StringBuilder |
将该构建器从startIndex到endIndex-1的位置的字符替换为给 定的字符串 |
reverse(): StringBuilder | 倒置构建器中的字符 |
setCharAt(index: int, ch:char):void | 将该构建器的指定下标位置设为新的字符 |
public class StringBuilderTest {
public static void main(String[] args) {
char[] data1 = {'2', '3', '4', '5', '6', '7', '8', '9', '0'};
char[] data2 = {'z', 'y', 'w'};
StringBuilder stringBuilder = new StringBuilder(); // 构造一个其中没有字符且初始容量为 16 个字符的字符串构建器。
StringBuilder stringBuilder1 = new StringBuilder(20); // 构造一个字符串构建器,其中没有字符,初始容量由容量参数指定。如果参数小于0则NegativeArraySizeException
StringBuilder stringBuilder2 = new StringBuilder("sfasf"); // 构造一个初始化为指定字符串内容的字符串构建器。字符串生成器的初始容量是 16 加上字符串参数的长度。
System.out.println("stringBuilder的长度:" + stringBuilder.length()); // 0
System.out.println("stringBuilder1的长度:" + stringBuilder1.length()); // 0
System.out.println("stringBuilder2的长度:" + stringBuilder2.length()); // 5
stringBuilder.append(1);
// 将 char 数组参数的子数组的字符串表示形式附加到此序列。
//char 数组 str 的字符,从索引偏移量开始,按顺序附加到此序列的内容中。这个序列的长度增加了 len 的值。
// offset: the index of the first char to append.
// len – the number of chars to append.
stringBuilder.append(data1, 0, 2);
stringBuilder.append(data1, 2, 2);
stringBuilder.append("abcefg123456789"); // 字符长度超过16,自动扩展
// delete(starIndex:int, endIndex:int):StringBuilder
stringBuilder.delete(0, 2);
stringBuilder.deleteCharAt(0);
// insert()
// offset 迁移量,不是下标,是指从原字符串的第几个开始(从1开始)
stringBuilder.insert(10, data2);
stringBuilder.insert(1, data1, 1, 2); // 这里的offset是data1的下标
// reverse()
stringBuilder.reverse();
System.out.println(stringBuilder); // 9876543wyz21gfecba5434
System.out.println("stringBuilder的长度:" + stringBuilder.length()); // 22
System.out.println("stringBuilder1的长度:" + stringBuilder1.length()); // 0
System.out.println("stringBuilder2的长度:" + stringBuilder2.length()); // 5
}
}
方法 | 描述 |
toString(): String | 从字符串构建器返回一个字符串对象 |
capacity():int | 返回该字符串构建器的容量 |
charAt(index: int): char | 返回指定下标位置的字符 |
length(): int | 返回该构建器中的字符数 |
setLength(newLength:int):void | 设置该构建器的新长度 |
substring(startIndex: int): String | 返回从startIndex开始的子字符串 |
substring(startIndex: int, endIndex:int): String | 返回从startIndex到endIndex-1的子字符串 |
trimToSize(): void | 减少用于字符串构建器的存储大小 |