关于StringBuffer

本文详细介绍了StringBuffer类的特点、构造方法及各种操作方法,包括添加、删除、替换、反转和截取等功能,帮助读者理解如何在Java中高效地使用StringBuffer进行字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuffer:线程安全的可变字符串。

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加合适一些。
在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。
但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。另外由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要慢一些。
上文引用链接:
http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html

构造方法:
StringBuffer常用的构造方法:
public StringBuffer():无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
StringBuffer的方法:
public int capacity():返回当前容量。 理论值(相当于瓶子容量)
public int length():返回长度(字符数)。 实际值(相当于瓶子里实际有多少水)
代码表现:

public class StringBufferDemo_01 {
    public static void main(String[] args) {
        StringBuffer sbf = new StringBuffer();
//      源码:
//      public StringBuffer() {
//          super(16);
//      }
        System.out.println("sbf:" + sbf);
        System.out.println("sbf.capacity():" + sbf.capacity());
        System.out.println("sbf.length():" + sbf.length());
        System.out.println("--------------------------");

        // public StringBuffer(int capacity):指定容量的字符串缓冲区对象
        StringBuffer sbf2 = new StringBuffer(50);
//      源码:
//      public StringBuffer(int capacity) {
//          super(capacity);
//      }
        System.out.println("sbf2:" + sbf2);
        System.out.println("sbf2.capacity():" + sbf2.capacity());
        System.out.println("sbf2.length():" + sbf2.length());
        System.out.println("--------------------------");

        // public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
        StringBuffer sbf3 = new StringBuffer("hello");
//      源码:
//      public StringBuffer(String str) {
//          super(str.length() + 16);
//          append(str);
//      }
        System.out.println("sbf3:" + sbf3);
        System.out.println("sbf3.capacity():" + sbf3.capacity());
        System.out.println("sbf3.length():" + sbf3.length());
    }
}

输出:

sbf:
sbf.capacity():16
sbf.length():0
--------------------------
sbf2:
sbf2.capacity():50
sbf2.length():0
--------------------------
sbf3:hello
sbf3.capacity():21//16+5
sbf3.length():5

可见:
StringBuffer如同String一样样重写了toString()等方法;
在不同的构造方法中的capacity()方法返回值不一,默认16,在16的基础上变成指定容量或者在16的基础上增加相应长度。

StringBuffer的添加功能:
public StringBuffer append(String str):
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

public class StringBufferDemo_02 {
    public static void main(String[] args) {
         StringBuffer sb = new StringBuffer();
         StringBuffer sb2 = sb.append("hello");
         System.out.println("sb:" + sb);
         System.out.println("sb2:" + sb2);
         System.out.println(sb == sb2); // true
     }
 }

这里就可以看出StringBuffer与String的区别,String一般会在改变字符串后生成新的字符串对象,而StringBuffer不会!所以sb==sb2返回true!

public class StringBufferDemo_02 {
    public static void main(String[] args) {
         StringBuffer sb = new StringBuffer();

        // 一步一步的添加数据
        // sb.append("hello");
        // sb.append(true);
        // sb.append(12);
        // sb.append(34.56);
        // 也可以链式编程:
        sb.append("hello").append(true).append(12).append(34.56);
        System.out.println("sb:" + sb);
        sb.insert(5, "world");
        System.out.println("sb:" + sb);
    }
}

输出:

sb:hellotrue1234.56
sb:helloworldtrue1234.56

StringBuffer的删除功能:
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
代码表现:

public class StringBufferDemo_03 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("hello").append("world").append("java");
        System.out.println("sb:" + sb);
        sb.deleteCharAt(1);
        System.out.println("sb:" + sb);
        sb.delete(5, 10);//包左不包右
        System.out.println("sb:" + sb);
    }
}

输出:

sb:helloworldjava
sb:hlloworldjava
sb:hllowava

对于方法:public StringBuffer delete(int start,int end)
end可以大于length,效果与end=length一样,不会报错
参见源代码:

    public AbstractStringBuilder delete(int start, int end) {
        if (start < 0)
            throw new StringIndexOutOfBoundsException(start);
        if (end > count)
            end = count;//这里count==length
        if (start > end)
            throw new StringIndexOutOfBoundsException();
        int len = end - start;
        if (len > 0) {
            System.arraycopy(value, start+len, value, start, count-end);
            count -= len;
        }
        return this;
    }

StringBuffer的替换功能:
public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

public class StringBufferDemo_04 {
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer();

        sb.append("hello");
        sb.append("world");
        sb.append("java");
        System.out.println("sb:" + sb);
        sb.replace(5, 10, "你好");
        System.out.println("sb:" + sb);
    }
}

输出:

sb:helloworldjava
sb:hello你好java

StringBuffer的反转功能:
public StringBuffer reverse()
代码实现:

public class StringBufferDemo_05 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("eno2orez_avaj");
        System.out.println("sb:" + sb);
        sb.reverse();
        System.out.println("sb:" + sb);
    }
}

输出:

sb:eno2orez_avaj
sb:java_zero2one

StringBuffer的截取功能:
注意返回值类型不再是StringBuffer本身了,返回类型是String!
public String substring(int start)
public String substring(int start,int end)

代码实现:

public class StringBufferDemo_06 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("hello").append("world").append("java");
        System.out.println("sb:" + sb);
        String s = sb.substring(5);
        System.out.println("s:" + s);
        System.out.println("sb:" + sb);
        String ss = sb.substring(5, 10);
        System.out.println("ss:" + ss);
        System.out.println("sb:" + sb);
    }
}

输出:

sb:helloworldjava
s:worldjava
sb:helloworldjava
ss:world
sb:helloworldjava

这里可以看出:StringBuffer对象sb一直没有改变!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值