1、StringBuilder构造方式
1、StringBuilder() :
创建一个初始值为空的字符串对象,数组长度为0,容器大小为16
无参构造 new StringBuilder()
StringBuilder sb = new StringBuilder();
//StringBuilder 重写了toString方法
System.out.println(sb);
2、StringBuilder(int c) :
创建一个初始值为空的字符串对象,数组长度(字符个数)为0,容器大小为int c
new StringBuilder(int capacity)
StringBuilder sb2 = new StringBuilder(20);
3、StringBuilder(String str) :
创建一个初始值为str的字符串对象,数组长度(字符个数)为str.length,容器大小为16+str.length
new StringBuilder(String str)
StringBuilder sb1 = new StringBuilder("abc");
System.out.println(sb1);//abc
2、StringBuilder获取长度的方法
StringBuilder对象中维护的是一个字符数组,所以可以获取字符数组的长度和元素的个数。
(1)capacity() :返回对象的初始容量 capacity() 获取StringBuilder容器的大小
(2)length():返回字符串对象长度 length() 获取StringBuilder元素的个数
StringBuilder stringBuilder = new StringBuilder("abcdefg");
//字符串长度是7 "abcdefg"是存在的
System.out.println(stringBuilder.length());//7
//capacity指的是容器大小 默认是16 又传入了字符串 是16+str.length
System.out.println(stringBuilder.capacity());//16 + 7
StringBuilder stringBuilder1 = new StringBuilder();
System.out.println(stringBuilder1.length());//0
System.out.println(stringBuilder1.capacity());//16
StringBuilder stringBuilder2 = new StringBuilder(30);
System.out.println(stringBuilder2.length());//0
System.out.println(stringBuilder2.capacity());//30
3、StringBuilder类型中常用的方法
1、增加方法:
append(int i) :在字符串基础上追加数据,可以加任何类型的数据
insert(int offset, char c) :在指定索引添加数据
添加的索引范围:0----length
StringBuilder sb = new StringBuilder("abcd");
sb.insert(0,"张三");
System.out.println(sb);//张三abcd
sb.insert(2,"李四");
System.out.println(sb);//张三李四abcd
sb.insert(sb.length(),"王五");
//索引范围 0-sb.length()
System.out.println(sb);//张三李四abcd王五
2、删除方法:
delete(int start, int end) :删除从start开始到end-1结束的字符
sb = new StringBuilder("abcdefgabc");
//把defg删除掉
sb.delete(3,7);
deleteCharAt(int index) :删除指定索引位置上的字符
System.out.println(sb);//abcabc
//删除指定索引的元素
sb.deleteCharAt(0);
System.out.println(sb);//bcabc
3、替换方法:
replace(int start, int end, String str) :将指定索引范围的字符换成新的字符串(包含头不包含尾)
//替换replace(int start,int end,String str)
sb = new StringBuilder("ilovejavaandmysql");
sb.replace(12,sb.length(),"java");
System.out.println(sb);//ilovejavaandjava
4、反转方法:
reverse() :将字符串在本身的基础进行反转
String str = "abcdefg";
System.out.println(new StringBuilder(str).reverse().toString());
4、StringBuilder的扩容机制(重点)
如果对象中维护的数组容量不够存储,就自动扩容数组
扩容方式:
先进行一个预扩容:原有的长度*2 + 2
如果能存储,就使用有的长度*2 + 2作为容器大小
如果不能存储,元素的长度作为容器的大小
//容器默认大小是16
StringBuilder sb = new StringBuilder();
//添加15个元素
sb.append("abcdefgabcdefga");
//默认大小为16 能够存 容器大小还是16
Sstem.out.println(sb1.capacity());//16
又添加了4个 此处是15+4=19个
sb.append("abaa");
//容器大小不够存储 扩容 原来容器大小 * 2 + 2=34个
System.out.println(sb.capacity());//34
StringBuilder sb1 = new StringBuilder();
//存入15个
sb1.append("abcdefgabcdefga");
//又存入20个 此处是15+20=35个 扩容一次是16*2+2=34个
sb1.append("abcdefgabcdefgababaa");
//当扩容一次之后还是不够存入时 容器大小直接变为要存入的元素长度 就是35
System.out.println(sb1.capacity());//35