StringBuffer(重点)
1. 基本介绍
-
(1)StringBuffer
是可变的字符序列,可以对字符串内容惊醒增删
-
-
(3)StringBuffer
是一个容器
-
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
对象,调用构造器
-
String str = "jackson";
StringBuffer stringBuffer = new StringBuffer(str);
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
(2)StringBuffer
—>String
StringBuffer stringBuffer = new StringBuffer("jackson");
String str1 = stringBuffer.toString();
String str2 = new String(stringBuffer);
二、StringBuffer
类的常用方法
方法介绍
-
增:append(“字符串”)
-
删
-
改:repalce(索引 1,索引 2,字符串)
-
-
翻转:reverse()
-
-
示例代码
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);