一、StringBuffer类
- java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。
- StringBuffer是final类,实现了Serializable接口,可以保存到文件或网络传输
-
继承了抽象类AbstractStringBuiler,属性char[] value存放字符序列
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, 所有在变化(增加/删除)
// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于String
StringBuffer stringBuffer = new StringBuffer("hello");
}
}
二、String VS StringBuffer
-
String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低 private final char value[];
- StringBuffer 保存的是字符串变量,里面的值可以改,每次StringBuffer的更新实际上是更新内容,不用每次更改地址,效率较高 char value[];
三、String 和 StringBuffer 相互转化
public class StringAndStringBuffer {
public static void main(String[] args) {
//看String——>StringBuffer
String str = "hello tom";
//方式1 使用构造器
//注意: 返回的才是StringBuffer 对象,对str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用的是append 方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
//看看StringBuffer ->String
StringBuffer stringBuffer3 = new StringBuffer("java教育");
//方式1 使用StringBuffer 提供的toString 方法
String s = stringBuffer3.toString();
//方式2: 使用构造器来搞定
String s1 = new String(stringBuffer3);
}
}
四、StringBuffer 类常见方法
public class StringBufferMethod {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');// "hello,"
s.append("张三丰");//"hello,张三丰"
s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
System.out.println(s);//"hello,张三丰赵敏100true10.5"
//删
/*
* 删除索引为>=start && <end 处的字符
* 解读: 删除11~14 的字符[11, 14)
*/
s.delete(11, 14);
System.out.println(s);//"hello,张三丰赵敏true10.5"
//改
//解读,使用周芷若替换索引9-11 的字符[9,11)
public class StringBufferMethod {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');// "hello,"
s.append("张三丰");//"hello,张三丰"
s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
System.out.println(s);//"hello,张三丰赵敏100true10.5"
//删
/*
* 删除索引为>=start && <end 处的字符
* 解读: 删除11~14 的字符[11, 14)
*/
s.delete(11, 14);
System.out.println(s);//"hello,张三丰赵敏true10.5"
//改
//解读,使用周芷若替换索引9-11 的字符[9,11)
//解读,在索引为9 的位置插入"赵敏",原来索引为9 的内容自动后移
s.insert(9, "赵敏");
System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"
//长度
System.out.println(s.length());//22
System.out.println(s);
}
}
五、StringBuffer课后练习
输入商品名称和商品价格,要求打印效果示例,使用StringBuffer类的方法来完成:
商品 商品价格
手机 123,456 //比如 价格3,456,789.88
要求:价格的小数点前面每三位用逗号隔开,在输出。
import java.util.Scanner;
public class StringBufferExercise02 {
public static void main(String[] args) {
/*
输入商品名称和商品价格,要求打印效果示例, 使用前面学习的方法完成:
商品名商品价格
手机123,564.59 //比如价格3,456,789.88
要求:价格的小数点前面每三位用逗号隔开, 在输出。
思路分析
1. 定义一个Scanner 对象,接收用户输入的价格(String)
2. 希望使用到StringBuffer 的insert ,需要将String 转成StringBuffer
3. 然后使用相关方法进行字符串的处理
代码实现
*/
//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, ",");
//上面的两步需要做一个循环处理,才是正确的
手机123,564.59 //比如价格3,456,789.88
要求:价格的小数点前面每三位用逗号隔开, 在输出。
思路分析
1. 定义一个Scanner 对象,接收用户输入的价格(String)
2. 希望使用到StringBuffer 的insert ,需要将String 转成StringBuffer
3. 然后使用相关方法进行字符串的处理
代码实现
*/
//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, ",");
//上面的两步需要做一个循环处理,才是正确的
}
}
注:这里讲的不够详细不清楚的码友们可以去哔哩哔哩搜看韩老师的讲解
【零基础 快速学Java】韩顺平 零基础30天学会Java
版权声明:本文为perterwallen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。