Java StringBuffer类

StringBuffer类用于处理可变的字符串,它提供修改字符串的方法,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。

定义

public StringBuffer() {
    super(16);
}
public StringBuffer(int capacity) {
    super(capacity);
}
public StringBuffer(String str) {
    super(str.length() + 16);
    append(str);
}

a. StringBuffer s0=new StringBuffer();分配了长16字节的字符缓冲区
b. StringBuffer s1=new StringBuffer(512);分配了512字节的字符缓冲区
c. StringBuffer s2=new StringBuffer("Happy new year!");在字符缓冲区中存放字符串"Happy new year!",另外,后面再留了16字节的空缓冲区。

方法

append方法

public StringBuffer append(boolean b)

该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.append(true);

则对象sb的值将变成”abctrue”。

使用该方法进行字符串的连接,将比String更加节约内容,例如应用于数据库SQL语句的连接,例如:

StringBuffer sb = new StringBuffer();
String user = “test”;
String pwd = “123”;
sb.append(“select * from userInfo where username=“)
.append(user)
.append(“ and pwd=”)
.append(pwd);

这样对象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。

deleteCharAt方法

public StringBuffer deleteCharAt(int index)

该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“Test”);

sb. deleteCharAt(1);

该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。

还存在一个功能类似的delete方法:

public StringBuffer delete(int start,int end)

该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如:

StringBuffer sb = new StringBuffer(“TestString”);

sb. delete (1,4);

该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

insert方法

public StringBuffer insert(int offset, boolean b)

该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“TestString”);

sb.insert(4,false);

该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。

reverse方法

public StringBuffer reverse()

该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.reverse();

经过反转以后,对象sb中的内容将变为”cba”。

substring方法

substring用于直接截取字符,从索引开始到索引结束的新的字符串,开始位置从1开始。

setCharAt方法

public void setCharAt(int index, char ch)

该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.setCharAt(1,’D’);

 则对象sb的值将变成”aDc”。

trimToSize方法

public void trimToSize()

该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

例子

实例操作一:字符串连接操作

package 字符串处理;
public class StringBufferDemo01{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 声明StringBuffer对象 
        buf.append("Hello ") ;                    // 向StringBuffer中添加内容
        buf.append("World").append("!!!") ;        // 可以连续调用append()方法
        buf.append("\n") ;                        // 添加一个转义字符
        buf.append("数字 = ").append(1).append("\n") ;    // 添加数字
        buf.append("字符 = ").append('C').append("\n");     // 添加字符
        buf.append("布尔 = ").append(true) ;    // 添加布尔值
        System.out.println(buf) ;            // 直接输出对象,调用toString()
    }
};

打印结果

Hello World!!!
数字 = 1
字符 = C
布尔 = true

实例操作二:字符串添加内容

public class StringBufferDemo03{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 声明StringBuffer对象 
        buf.append("World!!") ;        // 添加内容
        buf.insert(0,"Hello ") ;        // 在第一个内容之前添加内容
        System.out.println(buf) ;
        buf.insert(buf.length(),"偶my耶~") ;    // 在最后添加内容
        System.out.println(buf) ;
    }
};

打印结果

Hello World!!
Hello World!!偶my耶~

实例操作三:字符串反转

package 字符串处理;
public class StringBufferDemo04{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 声明StringBuffer对象 
        buf.append("World!!") ;        // 添加内容
        buf.insert(0,"Hello ") ;        // 在第一个内容之前添加内容
        String str = buf.reverse().toString() ;    // 将内容反转后变为String类型
        System.out.println(str) ;        // 将内容输出
    }
};

打印结果

!!dlroW olleH 

StringBuffer其实就是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作

在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。