(1)为什么需要StringBuffer
由于String的内容是不可变的,在频繁操作字符串的应用中,导致String对象泛滥,不断的被创建和销毁,占用大量的内存和CPU时间。
例如,将十万个"A"连成一个大的字符串。代码如下:
这将创建100000个对象,其中有99999个对象是临时对象,是计算的中间结果。JVM需要花费大量的内存来存放,也需要花费大量CPU时间来回收对象。
因此,通常要使用可变的字符串缓冲区类(StringBuffer) 来完成类似的工作:
这样,只需要创建一个StringBuffer和一个String对象就行了。
(3)常用方式
运行结果:
(4)方法
-
StringBuffer stringBuffer =
new StringBuffer();
-
stringBuffer.
append(
"abcdex");
-
System.out.
println(stringBuffer);
//abcdex
-
//返回当前容量
-
int capacity = stringBuffer.capacity();
-
System.out.
println(capacity);
// 16
-
//返回长度(字符数)
-
int length = stringBuffer.length();
-
System.out.
println(length);
-
-
//不会影响之后的stringBuffer本身
-
//截取开始到结尾的字符串,包括开头,不包括结尾
-
String substring = stringBuffer.substring(
0,
3);
-
System.out.
println(substring);
//abc
-
//从指定位置截取到末尾
-
String substring2 = stringBuffer.substring(
3);
-
System.out.
println(substring2);
//dex
-
-
//会影响之后的stringBuffer本身
-
//删除指定位置的字符,并返回本身
-
StringBuffer deleteCharAt = stringBuffer.deleteCharAt(
0);
-
System.out.
println(deleteCharAt);
// bcdex
-
//删除从指定位置开始到结束的内容,并返回本身
-
StringBuffer
delete = stringBuffer.
delete(
0,
3);
-
System.out.
println(
delete);
// ex
-
//从开始到结尾用指定字符串替换
-
StringBuffer replace = stringBuffer.replace(
0,
3,
"A**");
-
System.out.
println(replace);
//A**
-
//字符串反转
-
StringBuffer reverse = stringBuffer.reverse();
-
System.out.
println(reverse);
//**A
-
//替换指定位置的字符
-
stringBuffer.setCharAt(
0,
'T');
-
System.out.
println(stringBuffer);
//T*A
-
//在指定的位置(字符个数后)添加新的文本对象
-
StringBuffer insert = stringBuffer.insert(
2,
"xx");
-
System.out.
println(insert);
//T*xxA