1.概述
StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。
StringBuilder类被设计成在不需要多线程安全的情况下替换StringBuffer类的。如果程序中不需要多线程安全,推荐使用StringBuilder类,因为没有了同步的操作而速度上比较快。
2.类图
层次关系和StringBuffer相同,都是继承自AbstrcatStringBuilder,并且实现或间接实现了三个借口。
3.属性
将比较与StringBuffer,少了一个toString缓冲区,其他一致
4.构造方法
-
StringBuilder()默认的构造方法
同StringBuffer 都是调用父类的构造方法,初始容量同为16
-
StringBuilder(int capacity) 给定容量的构造方法
同StringBuffer 给定参数 调用父类的构造方法,根据参数指定容量。
-
StringBuilder(String str)给定初始值的构造方法
调用父类的构造方法,得到一个容量为str长度+16空间的StringBuilder,然后将字符串str添加其中。
-
StringBuilder(CharSequence seq)
调用父类的构造方法,得到一个容量为seq长度+16空间的StringBuilder,然后将字符序列seq添加其中。
5.append方法
重写父类的方法,父类的具体实现可以参考博客JDK源码解析—AbstractStringBuilder
public StringBuilder append(Object obj) {//将obj转字符串追加到末尾
return append(String.valueOf(obj));
}
public StringBuilder append(String str) {//追加str
super.append(str);
return this;
}
public StringBuilder append(StringBuffer sb) {//sb+sb
super.append(sb);
return this;
}
public StringBuilder append(CharSequence s) {//追加字符序列
super.append(s);
return this;
}
public StringBuilder append(CharSequence s, int start, int end) {//将字符序列从start开始到end-1的位置的字符添加到末尾
super.append(s, start, end);
return this;
}
public StringBuilder append(char[] str) {//添加字符数组
super.append(str);
return this;
}
public StringBuilder append(char[] str, int offset, int len) {//将字符数组offset的位置开始 长度为len的部分的字符添加到末尾
super.append(str, offset, len);
return this;
}
// 下面是添加数据基本类型
public StringBuilder append(boolean b) {//添加boolean 相当于添加一个字符串"true" or "false"
super.append(b);
return this;
}
public StringBuilder append(char c) {
super.append(c);
return this;
}
public StringBuilder append(int i) {
super.append(i);
return this;
}
public StringBuilder append(long lng) {
super.append(lng);
return this;
}
public StringBuilder append(float f) {
super.append(f);
return this;
}
public StringBuilder append(double d) {
super.append(d);
return this;
}
6.删除
-
delete(int start, int end)
删除从start位置开始到end-1的字符
-
deleteCharAt(int index)
删除指定位置的字符
7.替换
replace(int start, int end, String str)
将start开始到end-1位置的字符串替换成str
8.insert方法
insert方法也有很多,具体都是传入的参数不同
父类的具体实现可以参考博客JDK源码解析—AbstractStringBuilder
public StringBuilder insert(int index, char[] str, int offset,
int len)
{//在index的位置 插入str字符数组中 从offset位置开始len长度的字符串
super.insert(index, str, offset, len);
return this;
}
public StringBuilder insert(int offset, Object obj) {
super.insert(offset, obj);
return this;
}
@Override
public StringBuilder insert(int offset, String str) {
super.insert(offset, str);
return this;
}
@Override
public StringBuilder insert(int offset, char[] str) {
super.insert(offset, str);
return this;
}
public StringBuilder insert(int dstOffset, CharSequence s) {
super.insert(dstOffset, s);
return this;
}
public StringBuilder insert(int dstOffset, CharSequence s,
int start, int end)
{//从dstOffset位置开始 插入字符序列s中 start到end-1的字符串
super.insert(dstOffset, s, start, end);
return this;
}
// 下面是在指定位置插入基本数据类型
public StringBuilder insert(int offset, boolean b) {
super.insert(offset, b);
return this;
}
public StringBuilder insert(int offset, char c) {
super.insert(offset, c);
return this;
}
public StringBuilder insert(int offset, int i) {
super.insert(offset, i);
return this;
}
public StringBuilder insert(int offset, long l) {
super.insert(offset, l);
return this;
}
public StringBuilder insert(int offset, float f) {
super.insert(offset, f);
return this;
}
public StringBuilder insert(int offset, double d) {
super.insert(offset, d);
return this;
}
9.匹配
- int indexOf(String str) 从头开始寻找 返回匹配字符串str的首位下标
- int indexOf(String str, int fromIndex),从fromIndex位置开始寻找 返回匹配字符串str的首位下标
- int lastIndexOf(String str)从后开始寻找,返回匹配字符串str的首位下标
- lastIndexOf(String str, int fromIndex) 从fromIndex位置开始寻找,返回匹配字符串str的首位下标
10.翻转
StringBuilder reverse() 颠倒字符串