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的相互替换

  1. String------->StringBuffer
    (1)通过构造方法
    (2)通过StringBuffer的append或者insert方法
  2. 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方法基本相同,只是一个是线程安全,一个线程不安全

上一篇 下一篇

猜你喜欢

热点阅读