Java中StringBuffer类
2018-07-14 本文已影响3人
海人为记
众所周知String作为不可修改的对象,即每次更改String都会产生一个新的字符串对象,与之相对应的StringBuffer类的对象能够进行多次修改并且不会产生新的未使用的对象,因此咋内存上要优于String对象
StringBuffer对象的初始化
对于StringBuffer对象,初始化时不可将null
直接赋予。
StringBuffer sb = new StringBuffer(); //无参构造方法,默认容量是16
StringBuffer sb = new StringBuffer(int capacity); //指定容量的字符串缓冲区对象
StringBuffer sb = new StringBuffer(String string); //指定字符串内容的字符串缓冲区对象
当我们将任意类型的数据添加到StringBuffer类对象中时候,StringBuffer容量不够的情况下,会自动进行扩充容量,它的扩容公式为:原容量<<1 + 2
方法 | 描述 |
---|---|
public int capacity() | 返回当前容量 |
public int length() | 返回长度(字符数)实际值 |
public StringBuffer append(String s) | 将指定的字符串追加到此字符序列 |
public StringBuffer insert(int offset, int i) | 将 int 参数的字符串表示形式插入此序列中 |
public StringBuffer insert(int offset, String string) | 将String参数的字符串表示形式插入到此序列中 |
public StringBuffer deleteCharAt(int index) | 删除指定位置的字符,并返回本身 |
public StringBuffer delete(int start, int end) | 删除从指定位置开始指定位置结束的内容,并返回本身 |
public StringBuffer reverse() | 将此字符序列用其反转形式取代 |
public StringBuffer replace(int start, int end, String str) | 使用给定String中的字符替换此序列的子字符串中的字符 |
public String substring(int start) | 从指定位置截取到末尾 |
public String substring(int start, int end) | 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置(注意:返回值不再是StringBuffer本身,而是String) |
StringBuffer和String的相互替换
- String------->StringBuffer
(1)通过构造方法
(2)通过StringBuffer的append或者insert方法 - StringBuffer------->String
(1)通过toString()方法
(2)通过substring(0,length)方法
StringBuffer使用
public class StringBufferLean {
public static void main(String[] args) {
//使用构造方法创建对象
// 无参构造方法创建对象,分配默认容量
StringBuffer buffer = new StringBuffer();
//获取容量
int capacity = buffer.capacity();
System.out.println(capacity); // 默认16
//获取长度(获取实际长度)
int length = buffer.length();
System.out.println(length); // 0;
//带参数capacity创建对象,设置容量
StringBuffer stringBuffer = new StringBuffer(20);
capacity = stringBuffer.capacity();
System.out.println(capacity); // 20
length = stringBuffer.length();
System.out.println(length); // 0;
//带参String创建对象,分配容量为字符串长度加上默认的16
String str = "abcdefghijklmn";
StringBuffer strBuffer = new StringBuffer(str);
capacity = strBuffer.capacity();
System.out.println(capacity); // 30
length = strBuffer.length();
System.out.println(length); // 14 为字符串的实际长度
// public StringBuffer append(String string) 添加字符串
// 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
strBuffer.append(str);
System.out.println(strBuffer); //abcdefghijklmnabcdefghijklmn
//public StringBuffer insert(int offset, String string) 插入
//在指定位置把任意类型的数据插入到字符串缓存区里面,并返回字符串缓冲区本身
strBuffer.insert(2, "love"); // 插入到指定的位置
System.out.println(strBuffer); //ablovecdefghijklmnabcdefghijklmn
//public String toString()
// 转为String类型的字符串
str = strBuffer.toString();
System.out.println(str); //ablovecdefghijklmnabcdefghijklmn
// public StringBuffer deleteCharAt(int index)
// 删除指定位置的字符,并返回本身
strBuffer.deleteCharAt(10);
System.out.println(strBuffer); //ablovecdefhijklmnabcdefghijklmn
//public StringBuffer delete(int start, int end)
//删除从指定位置开始指定位置结束的内容,并返回本身
strBuffer.delete(2, 5);
System.out.println(strBuffer); //abecdefhijklmnabcdefghijklmn
//public StringBuffer replace(int start, int end, String string)
//从start开始到end用string替换
strBuffer.replace(2, 5, "爱谁谁");
System.out.println(strBuffer); //ab爱谁谁efhijklmnabcdefghijklmn
//public StringBuffer reverse()
//字符串反转
strBuffer.reverse();
System.out.println(strBuffer); //nmlkjihgfedcbanmlkjihfe谁谁爱ba
//public String substring(int start)
// 从指定位置截取到末尾
str = strBuffer.substring(2); //注意,使用截取返回的是String类型的字符串
System.out.println(str); //lkjihgfedcbanmlkjihfe谁谁爱ba
//public String substring(int start, int end)
//截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
str = strBuffer.substring(2, 20); //注意:使用截取返回的是String类型的字符串
System.out.println(str); //lkjihgfedcbanmlkji
}
}
StringBuffer和StringBuilder方法基本相同,只是一个是线程安全,一个线程不安全