StringBuffer
定义
1.java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
2.很多方法与String相同,但StringBuffer是可变长度的。
3.StringBuffer是一个容器。
String和StringBuffer的不同
1.String保存的是字符串常量,里面的值不嫩更改,每次String的更新实际上就是更改地址,效率较低
String类的常量定义: private final char value[];
2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高
StringBuffer字符串变量定义: char][] value;放在堆
String和StringBuffer的互相转换
package string;
public class StringBufer01 {
public static void main(String[] args) {
//String --> StringBuffer
String str = "sad";
//1.使用构造器
StringBuffer stringBuffer = new StringBuffer(str);
System.out.println(stringBuffer);
//2.使用append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
//StringBuffer ---> String
StringBuffer stringBuffer2 = new StringBuffer("你好");
//1。利用StringBuffer对象的toString方法
String str2 = stringBuffer2.toString();
System.out.println(str2);
//2.利用构造器
String str3 = new String(stringBuffer2);
System.out.println(str3);
}
}
StringBuffer类的常用方法
1.增 append
2.删delete(start,end)
3.改replace(start,end,String)
4.查indexOf 查找字符串第一次出现的位置,找不到返回-1
5.插入 insert
6.获取长度length
package string;
public class StringBuffer02 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("hello,java");
System.out.println(stringBuffer);
//1.增 append
stringBuffer.append(",I am wulian");
System.out.println(stringBuffer);
//2.删delete(start,end)
stringBuffer.delete(0,2);
System.out.println(stringBuffer);
//3.改replace(start,end,String)
stringBuffer.replace(0,3,"hhh");
System.out.println(stringBuffer);
//4.查indexOf 查找字符串第一次出现的位置,找不到返回-1
System.out.println(stringBuffer.indexOf("java"));
//5.插入 insert
stringBuffer.insert(1,'a');
System.out.println(stringBuffer);
//6.获取长度length
System.out.println(stringBuffer.length());
}
}
编译结果
测试
package string;
public class StringBufferTest {
public static void main(String[] args) {
String str = null;
StringBuffer stringBuffer = new StringBuffer();
System.out.println(stringBuffer.length());
stringBuffer.append(str);
System.out.println(stringBuffer.length());
StringBuffer stringBuffer1 = new StringBuffer(str);
System.out.println(stringBuffer.length());
}
}
编译结果
分析
使用append方法是将null作为字符串添加到char[]中,故数组长度为4
但是使用StringBuffer构造器是将String对象作为参数传入,但是此时str为空,故出现了空指针异常
如图所示 str为空,str.length() + 16 会报错
联系
输入商品名称和商品价格,要求打印效果示例,使用前面学习的方法完成商品名商品价格
手机123,564.59 1/比如价格3.456,789.88
要求:价格的小数点前面每三位用逗号隔开,在输出。
package string;
import java.util.Scanner;
public class StringBufferTest {
public static void main(String[] args) {
/*String price = "13123.342";
StringBuffer stringBuffer = new StringBuffer(price);
int i = stringBuffer.indexOf(".");
System.out.println(i);
stringBuffer.insert(i-3,',');
System.out.println(stringBuffer);*/
String phone = new String("手机");
String price = new Scanner(System.in).next();
StringBuffer stringBuffer = new StringBuffer(price);
for (int i = stringBuffer.lastIndexOf(".") -3; i > 0; i -= 3){
stringBuffer.insert(i,',');
}
System.out.print(phone + " ");
System.out.println(stringBuffer);
}
}
编译结果