Java中StringBuffer类的常用方法详解与使用示例

宋时安
宋时安
发布时间:2026-10-16 | 7人浏览过
原创

Java中的String对象一旦创建便不可修改,而StringBuffer提供了可变的字符序列。本文整理了StringBuffer的核心方法,包括append、insert、reverse、replace、substring、delete和indexOf等,并通过具体代码示例展示各方法的实际操作结果,同时解析其与String的本质区别。

StringBuffer类概述

在Java编程中,String对象是不可变的(Immutable),每次对字符串进行修改都会创建新的对象,这在频繁拼接场景下会影响性能。StringBuffer类提供了可变的字符序列,允许直接修改内容,且是线程安全的。以下是其最常用的操作方法。

第1步:初始化与追加内容

StringBuffer可以通过无参构造函数或传入初始字符串来实例化。追加内容通常使用append方法,支持追加char、String或其他StringBuffer对象。追加后原对象内容改变,返回对象自身以便链式调用。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("456");
        a.append("qwe");
        System.out.println(a);
    }
}

第2步:在指定位置插入内容

若需在字符串中间插入文本,使用insert(int offset, String str)方法。该方法将字符串插入到指定的索引位置,后续字符自动后移。注意索引从0开始。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("456");
        a.insert(1, "asd");
        System.out.println(a);
    }
}

第3步:反转字符串内容

使用reverse()方法可以将当前字符序列倒序排列。这是一个原地修改操作,直接改变对象状态并返回引用。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("456");
        System.out.println(a.reverse());
    }
}

第4步:替换指定范围的内容

replace(int start, int end, String str)用于用新字符串替换旧范围的内容。需要注意的是,截断替换遵循“左闭右开”原则,即包含起始位置start,不包含结束位置end。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("456");
        // 替换索引1到2之间的内容(即'5'),不覆盖'6'
        a.replace(1, 2, "ABCDE");
        System.out.println(a);
    }
}

替换的范围 不包含结束的值

第5步:截取子字符串

虽然StringBuffer是可变的,但substring方法会返回一个不可变的String对象。同样遵循左闭右开区间。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("0123456");
        // 截取索引1到4的内容:'1', '2', '3' (不包含4)
        String b = a.substring(1, 4);
        System.out.println(b);
    }
}

截取的范围 不包含结束的值

第6步:删除指定范围的字符串

使用delete(int start, int end)移除指定区间的字符,结果仍为StringBuffer类型,通常需要调用toString()转为String进行打印或其他处理。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("0123456");
        // 删除索引1到4之间的内容
        String b = a.delete(1, 4).toString();
        System.out.println(b);
    }
}

删除的范围 不包含结束的值

第7步:查找指定的内容是否存在

通过indexOf(String str)可以查找子串第一次出现的索引。如果找到,返回对应的位置;如果未找到,则返回-1。

public class Hello {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("0123456");
        System.out.println(a.indexOf("6"));
        System.out.println(a.indexOf("d"));
    }
}

查找到了,则返回内容的位置;没有查找到,则返回-1

String与StringBuffer的区别

  • 可变性:String的内容一旦声明则不可改变(Immutable);而StringBuffer声明的内容可以直接改变(Mutable)。
  • 线程安全:StringBuffer的方法是同步锁定的,线程安全但效率略低;String本身不可变,天然线程安全;若需更高性能的单线程字符串操作,推荐使用StringBuilder。
  • 内存占用:频繁拼接字符串时,String会产生大量临时对象导致内存浪费,而StringBuffer直接在原有数组上操作,更加高效。
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表