StringBuilder
- 是一个可变对象,可以预分配缓冲区。在新增字符时,不会创建新的临时对象
- 支持链式操作,实现链式操作的关键是返回实例本身
方法
构造函数
1)StringBuilder有四个构造函数:
- StringBuilder() :value内容为空,并设置容量为16个字节;
- StringBuilder(CharSequeceseq) :使用seq初始化,容量在此基础上加16;
- StringBuilder(int capacity):设置特定容量;
- StringBuilder(String str):使用str初始化,容量str大小的基础上加16;
2)append方法
由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载了append方法
3)insert方法
可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:
4)其它会改变内容的方法
上面的那些方法会增加StringBuilder的内容,还有一些方法可以改变StringBuilder的内容:
- StringBuilder delete(int start,int end) :删除从start到end(不包含)之间的内容;
- StringBuilder deleteCharAt(int index) :删除index位置的字符
- StringBuilderreplace(int start,int end,String str):用str中的字符替换value中从start到end位置的子序列;
- StringBuilder reverse() :反转;
- void setCharAt(int index,char ch):使用ch替换位置index处的字符;
- void setLength(int newLength):可能会改变内容(添加’\0’);
5)其它常用方法
下面这些方法不会改变内容:
- int capacity():返回value的大小即容量;
- int length():返回内容的大小,即count;
- char charAt(int index):返回位置index处的字符;
- void ensureCapacity(int minimumCapacity):确保容量至少是minimumCapacity;
- void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):返回srcBegin到srcEnd的字符到dst;
- int indexOf(String str):返回str第一次出现的位置;
- int indexOf(String str,int fromIndex):返回从fromIndex开始str第一次出现的位置;
- int lastIndexOf(String str):返回str最后出现的位置;
- int lastIndexOf(String str,int fromIndex):返回从fromIndex开始最后一次出现str的位置;
- CharSequence subSequence(int start,int end):返回字符子序列;
- String substring(int start):返回子串;
- String substring(int start,int end):返回子串;
- String toString():返回value形成的字符串;
- void trimToSize():缩小value的容量到真实内容大小;
例题
//例1:链式操作
public class Main {
public static void main(String[] args) {
var sb = new StringBuilder(1024);
sb.append("Mr ")
.append("Bob")
.append("!")
.insert(0, "Hello, ");
System.out.println(sb.toString());
}
}
//运行结构:Hello, Mr Bob!
//例2:链式操作
public class Main {
public static void main(String[] args) {
Adder adder = new Adder();
adder.add(3)
.add(5)
.inc()
.add(10);
System.out.println(adder.value());
}
}
class Adder {
private int sum = 0;
public Adder add(int n) {
sum += n;
return this;
}
public Adder inc() {
sum ++;
return this;
}
public int value() {
return sum;
}
}
//运行结果:19