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

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

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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。