StringBuffer类
基本介绍
1、java.lang.StringBuffer代表可变的字符序列,可以对子符串内容进行增删
2、很多地方和String相同,但是StringBuffer是可变长度
3、StringBuffer是一个容器
package StringBuffer_;
public class StringBuffer01 {
public static void main(String[] args) {
//1、StringBuffer的直接父类是AbstractStringBuffer
//2、StringBuffer实现了Serializable接口,即StringBuffer的对象可以串行化
//3、在父类中AbstractStringBuffer有属性char[] value;不是final
//该value数组存放字符串内容,因此存放在堆中
//4、StringBuffer是一个 final类,不可以被继承
//5、因为StringBuffer字符内容是存在char[] value。所以在变化时(增加/删除),不用每次都更换地址(即不用每次都创建新的对象),所以它的效率高于String
StringBuffer stringBuffer = new StringBuffer();
}
}
StringBuffer和String的对比
1、String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
private fianl char value[];//放在常量池
2、StringBuffer保存的是字符串常量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,只有当空间大小不够的时候一次性括,效率较高
char[] value;//放在堆
StringBuffer的转换
StringBuffer的构造器
StringBuffer()
构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer(CharSequence seq)
构造一个包含与指定的相同字符的字符串缓冲区 CharSequence 。
StringBuffer(int capacity)
构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer(String str)
构造一个初始化为指定字符串内容的字符串缓冲区。
package StringBuffer_;
/**
* StringBuffer构造器的使用
*/
public class StringBuffer02 {
public static void main(String[] args) {
//构造器的使用
//会创建一个容量大小为16的char[],用于存放字符内容
StringBuffer stringBuffer = new StringBuffer();
//通过构造器指定char[] 大小
StringBuffer stringBuffer1 = new StringBuffer(100);
//通过给一个String 创建 StringBuffer,char[]大小就是str.length()+16
StringBuffer hello = new StringBuffer("hello");
}
}
String 和StringBuffer相互转换的实现
String----->StringBuffer
StringBuffer--->String
package 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 hello = new StringBuffer("hello");
//1.使用StringBuffer提供的toString方法
String s = hello.toString();
//使用构造器
String s1 = new String(hello);
}
}
StringBuffer类常见方法
1、增append
2、删delete(start, end)
3、改replace(start , end,String)将start----end之间的内容替换掉,不含end
4、查indexof 查找子串在字符串第一次出现的索引,如果找不到返回-1
5、插insert
6、获取长度 length
package StringBuffer_;
public class StringBufferMethod {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(",");
s.append("你好");
System.out.println(s);
//删
//删除索引:>=start && <end处的字符
s.delete(0,4);//>=0 <4
System.out.println(s);
//改
s.replace(4,6,"hhh");
System.out.println(s);
//查
StringBuffer s1 = new StringBuffer("jksdhksdgsdsd");
System.out.println(s1.indexOf("s"));
//插
//在索引为2的位置插入,原来为2的此处后移
s1.insert(2,"你好");
System.out.println(s1);
//获取长度
System.out.println(s1.length());
}
}
习题:
package StringBuffer_;
import java.util.Scanner;
public class StringBufferExercise02 {
/**
* 输入商品名称和商品价格,要求打印效果示例, 使用前面学习的方法完成:
* 商品名 商品价格
* 韩顺平循序渐进学 Java 零基础
* 手机 123,564.59 //比如 价格 3,456,789.88
* 要求:价格的小数点前面每三位用逗号隔开, 在输出。
*
* 思路:
* 定义一个Scanner对象,接收用户的输入价格(String)
* 使用StringBuffer的insert,将String转成StringBuffer
* 使用相关方法进行字符串的处理
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String price=scan.next();
//String price="123456.44";
StringBuffer sb = new StringBuffer(price);
for (int i=sb.indexOf(".")-3;i>0;i-=3){
sb=sb.insert(i,",");
}
System.out.println(sb);
}
}