(二)StringBuffer
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。很多方法和String相同,但是StringBuffer是可变长度的
StringBuffer是一个容器
public class StringBuffer01 {public static void main(String[] args) {//老韩解读//1. StringBuffer 的直接父类 是 AbstractStringBuilder//2. StringBuffer 实现了 Serializable, 即StringBuffer的对象可以串行化//3. 在父类中 AbstractStringBuilder 有属性 char[] value,不是final// 该 value 数组存放 字符串内容,因此存放在堆中的//4. StringBuffer 是一个 final类,不能被继承//5. 因为StringBuffer 字符内容是存在 char[] value, 所以在变化(增加/删除)// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于 StringStringBuffer stringBuffer = new StringBuffer("hello");}}
String VS. Stringbuffer
(1)String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低//private final char[] value;
(2)StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高//char[] value;放在堆
String和StringBuffer相互转换
开发中,常常需要将String和StringBuffer进行转换
Stringbuffer的构造器:
String和StringBuffer的转换:
public class StringAndStringBuffer {public static void main(String[] args) {//看 String——>StringBufferString str = "hello tom";//方式1 使用构造器//注意: 返回的才是StringBuffer对象,对str 本身没有影响StringBuffer stringBuffer = new StringBuffer(str);//方式2 使用的是append方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1 = stringBuffer1.append(str);//看看 StringBuffer ->StringStringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");//方式1 使用StringBuffer提供的 toString方法String s = stringBuffer3.toString();//方式2: 使用构造器来搞定String s1 = new String(stringBuffer3);}}
StringBuffer常用方法:
例题1:
例题2:
public class StringBufferExercise02 {public static void main(String[] args) {/*输入商品名称和商品价格,要求打印效果示例, 使用前面学习的方法完成:商品名商品价格手机123,564.59 //比如 价格 3,456,789.88要求:价格的小数点前面每三位用逗号隔开, 在输出。思路分析1. 定义一个Scanner 对象,接收用户输入的 价格(String)2. 希望使用到 StringBuffer的 insert ,需要将 String 转成 StringBuffer3. 然后使用相关方法进行字符串的处理代码实现*///new Scanner(System.in)String price = "8123564.59";StringBuffer sb = new StringBuffer(price);//先完成一个最简单的实现123,564.59//找到小数点的索引,然后在该位置的前3位,插入,即可// int i = sb.lastIndexOf(".");// sb = sb.insert(i - 3, ",");//上面的两步需要做一个循环处理,才是正确的for (int i = sb.lastIndexOf(".") - 3; i > 0; i -= 3) {sb = sb.insert(i, ",");}System.out.println(sb);//8,123,564.59}}