一、基本介绍:
1、StringBuffer类
看下面这张图片:StringBuffer实现了Serialization和CharSequence接口、继承AbstractStringBuilder类。
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
很多方法与String相同,但是StringBuffer是可变长度的。
也可以说StringBuffer是一个容器。下图是他的解释。(其实和上图表达的意思一样)
2、StringBuffer的构造器
StringBuffer() | 构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符StringBuffer stringbuffer = new StringBuffer(); |
StringBuffer(CharSequence seq) | public java.lang.StringBuilder(charSequence seq)构造一个字符串缓冲区,它包含与指定的Charsequence 相同的字符。 |
StringBuffer(int capacity)//capacity[容量] | 构造一个不带字符,但具有指定初始容量的字符串缓冲区。即对 char[]大小进行指定 StringBuffer stringbuffer = new StringBuffer(100); |
StringBuffer(String str) | 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 StringBuffer hello = new StringBuffer("hello"); |
3、StringBuffer类的常用方法
StringBufier append(String str) | 向 StringBufer 追加内容 str |
StringBufer append(StringBuffer sb) | 向StingBufer 追加内容sb |
StringBuffer append(char c) | 向StringBuffer 追加内容c |
StringBuffer delete(int start,int end) | 删除指定范围的字符串 |
StringBuffer insert(int offset,String str) | 在指定位置加上指定字符串 |
StringBuffer reverse( ) | 将字符串内容反转 |
replace(start,end,string) | 将start到end 间的内容替换掉,不含end |
indexOf() | 查 。查找子串在字符串第1次出现的索引,如果找不到返回-1 |
length( ) | 获取长度 |
趁热打铁:
1、写出下面代码输出的内容? String str = null; StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(str);//底层调用的是AbstractStringBuilder System.out.println(stringBuffer.length()); //4 System.out.println(stringBuffer);//null
2、要求:价格的小数点前面每三位用逗号隔开,并输出。
输出商品名称和商品价格,要求打印效果示例,使用前面 学习的方法完成:
商品名 商品价格
手机 123,456.69 //比如价格 3,345,678.88
主要代码展示:
String price = "9876544.90"; StringBuffer stringBuffer=new StringBuffer(price); for (int i = stringBuffer.lastIndexOf(".")-3; i >0 ; i-=3) { stringBuffer=stringBuffer.insert(i,","); } System.out.println(stringBuffer);//9,876,544.90
二、String 和 StringBuffer 的对比
String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。
StringBuffer 保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容 ,不用每次更新地址,效率较高。//char[] value;存放在堆里面。
总而言之,StringBuffer字符内容是存在 char[] value,当需要变化时(增加/删除),不用每次都更换地址(即不是每次创建新对象),所以效率高于String。
三、String 和StringBuffer的相互转换
1、String转为StringBuffer
String str ="hello tom";
方式1:使用构造器
StringBuffer stringBuffer = new StringBuffer(str);
注意:返回的才是StringBuffer对象,对str本身没有影响
方式2:使用的是append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 =stringBuffer1.append(str);
2、StringBuffer 转为 String
StringBuffer stringBuffer3 = new StringBuffer("Java学习");
方式1: 使用StringBuffer提供的 toString方法
String s = stringBuffer3.toString();
方式2: 使用构造器
String s1 = new String(StringBuffer3);