由于 StringBuilder 类和 StringBuffer 类的方法基本都是一样的,故以 StringBuilder 类为例进行总结,实际开发中,StringBuilder 类的用处比 StringBuffer 类要多。
方法声明 | 功能介绍 |
---|---|
StringBuilder() | 使用无参方式构造对象,容量为16 |
StringBuilder(int capacity) | 根据参数指定的容量来构造对象,容量为参数指定大小 |
StringBuilder(String str) | 根据参数指定的字符串来构造对象,容量为:16+字符串长度 |
StringBuilder s1 = new StringBuilder("Hello World");
System.out.println(s1.length());//11
capacity() 方法:返回调用对象的容量,返回值为 int 类型
StringBuilder s1 = new StringBuilder();
System.out.println(s1.capacity());// 16 默认是容量是16
StringBuilder s2 = new StringBuilder(20);
System.out.println(s2.capacity());// 20
StringBuilder s3 = new StringBuilder("Hello World");
System.out.println(s3.capacity());// 11 + 16 = 27
append(String str) 方法:将指定的字符串追加到此字符序列,返回值为 StringBuilder 类型
当字符串的长度超过了字符串对象的初始容量时,该字符串对象会自动扩容,默认扩容算法是:原始容量*2 + 2,如果扩容后还不够,则将字符串的长度设置为容量值。底层采用byte数组来存放所有的字符内容。
//默认扩容方法可行时
StringBuilder s1 = new StringBuilder("Hello World");
System.out.println(s1.length());// 11
System.out.println(s1.capacity());// 11 + 16 = 27
s1.append("Give you some color to see see"); //长度为30
System.out.println(s1.length());// 41
System.out.println(s1.capacity());// 27 * 2 + 2 = 56
//添加的字符串过长时
StringBuilder s2 = new StringBuilder("Hello World");
s2.append("Give you some color to see see Give you some color to see see"); //长度为61
System.out.println(s2.length());// 72
System.out.println(s2.capacity());// 27 * 2 + 2 = 56 < 72 72
insert(int offset, String str) 方法:在指定位置插入字符串,返回值为 StringBuilder 类型,参数插入位置 offset 为 int 类型,字符串 str 为 String 类型。开发中常用 append() 方法来添加字符串
StringBuilder s1 = new StringBuilder("hello");
//字符串前面插入“abc”
s1.insert(0, "abc");
//字符串后面插入“xyz”
s1.insert(s1.length(), "xyz");
System.out.println(s1.length());// 11
System.out.println(s1);// abchelloxyz
s1.insert(5, "o");
System.out.println(s1);// abcheolloxyz
delete(int start,int end) 方法:删除指定位置的字符串,返回值为 StringBuilder 类型,参数 start 和 end均为 int 类型,包括 start,不包括 end
StringBuilder s1 = new StringBuilder("Hello WorldGive you some color to see see");
s1.delete(0, 7);
System.out.println(s1);// orldGive you some color to see see
s1.delete(10, s1.length());
System.out.println(s1);// orldGive y
deleteCharAt(int index) 方法:将当前字符串中下标为index位置的单个字符删除,返回值为 StringBuilder 类型,参数为 int 类型
StringBuilder s1 = new StringBuilder("Hello WorldGive you some color to see see");
s1.deleteCharAt(0);
System.out.println(s1);// ello WorldGive you some color to see see
replace(int start,int end,String str) 方法:替换字符串,返回值为 StringBuilder 类型,参数 start 和 end均为 int 类型,包括 start,不包括 end,参数 str 为 String 类型
StringBuilder s1 = new StringBuilder("Hello World");
s1.replace(0, 5, "hi");
System.out.println(s1);// hi World
reverse() 方法:字符串反转,返回值为 StringBuilder 类型
StringBuilder s1 = new StringBuilder("Hello World");
s1.reverse();
System.out.println(s1);// dlroW olleH
三者的效率由低到高排序为:
String < StringBuffer < StringBuilder
总结如下: