StringBuffer(重点)
1. 基本介绍
-
(1)StringBuffer
是可变的字符序列,可以对字符串内容惊醒增删
-
(2)很多方法喝String
相同,但StringBuffer
可变长度
-
(3)StringBuffer
是一个容器
-
(4)StringBuffer
是final类,不能被继承
2. 结构关系图

(1) StringBuffer 的直接父类是 AbstractStringBuilder
(2) StringBuffer 实现了 Serializable
,即 StringBuffer 的对象可以串行化(即可以在网络中传输)
(3) 在父类中 AbstractStringBuilder 有属性 char[] value
, 不是 final
(4)数组的起始大小是 16,如果大于 16 个字符长度,会自动扩容
(5) 该 value 数组存放字符串内容,引出存放在堆中的
(6) 因为 StringBuffer 字符内容是存在 char[] value, 所以在变化(增加/删除)时不用每次都更换地址(即不是每次创建新对象),所以效率高于 String
一、String
和StringBuffer
的相互转换
(1)String
—>StringBuffer
-
方法一:创建StringBuffer
对象,调用构造器
-
方法二:使用append方法
String str = "jackson";
StringBuffer stringBuffer = new StringBuffer(str);
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
(2)StringBuffer
—>String
-
方法一:创建String
对象,调用构造器
-
方法二:调用StringBuffer
的toString方法
StringBuffer stringBuffer = new StringBuffer("jackson");
String str1 = stringBuffer.toString();
String str2 = new String(stringBuffer);
二、StringBuffer
类的常用方法
方法介绍
-
增:append(“字符串”)
-
删
-
delete(索引 1,索引 2)
-
deleteCharAt(int index)
-
改:repalce(索引 1,索引 2,字符串)
-
插:insert(索引,字符串)
-
翻转:reverse()
-
截取:substring(索引 1,索引 2)
-
索引
-
indexOf(“字符串”):第一次出现的索引
-
lastIndexOf(“字符串”):最后依一次出现的索引
示例代码
StringBuffer stringBuffer = new StringBuffer("hello~");
System.out.println("stringBuffer --> " + stringBuffer);
stringBuffer.append("world");
System.out.println("append(\"world\") --> " + stringBuffer);
stringBuffer.delete(6,11);
System.out.println("delete(6,11) --> " + stringBuffer);
stringBuffer.deleteCharAt(5);
System.out.println("deleteCharAt(5) --> " + stringBuffer);
stringBuffer.insert(5,"~world");
System.out.println("insert(5,\"~world\") --> " + stringBuffer);
System.out.println("stringBuffer.substring(5,11) --> " + stringBuffer.substring(5,11));
stringBuffer.replace(5,11,"");
System.out.println("replace(5,11,\"\") --> " + stringBuffer);
System.out.println("indexOf(\"l\") --> " + stringBuffer.indexOf("l"));
System.out.println("lastIndexOf(\"l\") --> " + stringBuffer.lastIndexOf("l"));
System.out.println("reverse() --> " + stringBuffer.reverse());
输出结果
stringBuffer --> hello~
append("world") --> hello~world
delete(6,11) --> hello~
deleteCharAt(5) --> hello
insert(5,"~world") --> hello~world
stringBuffer.substring(5,11) --> ~world
replace(5,11,"") --> hello
indexOf("l") --> 2
lastIndexOf("l") --> 3
reverse() --> olleh
三、小练习
题目:价格中小数点前的数字,每三位用逗号隔开
String price = "8123564.59";
StringBuffer sb = new StringBuffer(price);
for (int j = sb.lastIndexOf(".") - 3; j > 0; j -= 3) {
sb = sb.insert(j, ",");
}
System.out.println(sb);