Java StringBuilder 字符串操作方法及API整理

Dylan
Dylan
发布时间:2026-10-13| 7人浏览过
原创

本文将深入解析 Java 中的可变字符串类 StringBuilder。作为 StringBuffer 的非线程安全替代方案,StringBuilder 在单线程环境下能提供更高效的字符串增删改查能力。文章梳理了其继承关系、核心 API 列表,并通过完整的代码示例演示了插入、追加、替换、删除及索引查找等关键操作的用法与执行结果。

结果或目标

通过阅读本篇内容,你将能够:了解 StringBuilder 的内部机制;熟练掌握其常用操作方法;在需要频繁修改字符串的场景中选择并使用此类以提升性能。

准备条件

0. StringBuilder 类型简介

StringBuilder 是一个可变的字符序列,它继承于 AbstractStringBuilder 抽象类并实现了 CharSequence 接口。其内部底层通过字符数组实现存储,并且支持动态扩容。

在使用上,StringBuilder 与 StringBuffer 的方法基本一致。唯一的核心区别在于线程安全性:StringBuilder 是线程不安全的,因此它在单一线程的使用假设下性能更高;而 StringBuffer 则是线程安全的。当不需要处理多线程并发问题时,推荐使用 StringBuilder。

通常实例化时若不指定初始大小,容量会自动根据参数长度加 16 进行设定。以下是该类的继承与实现结构:

第1步:获取 StringBuilder 常用 API 方法表

目的:熟悉该类提供的所有标准操作方法。

动作:参考以下核心方法列表。这些方法涵盖了从基础构造到复杂字符操作的各种需求:


StringBuilder()
StringBuilder(int capacity)
StringBuilder(CharSequence seq)
StringBuilder(String str)

// 添加/插入/替换相关
StringBuilder append(...) / insert(...) / replace(...) / reverse() / delete(...) / deleteCharAt(...)
// 查找/查询相关
int capacity() / charAt(int index) / indexOf(String subString) / lastIndexOf(...) / length()
// 其他功能
void setCharAt(int index, char ch) / void setLength(int length) / String toString()

真实操作顺序

为了更直观地理解 StringBuilder 的各项功能,下面分模块展示具体的测试代码及运行结果。

第2步:演示插入 (insert) 相关 API

入口/代码:`StringBuilderInsertTest.java`

动作说明:insert() 方法允许在指定的偏移量位置插入各种类型的对象(如字符数组、浮点数、布尔值、甚至其他的 StringBuilder 或 HashMap 对象)。特别注意插入区间参数时的包含与排除规则(起始位包含,结束位不包含)。


import java.util.HashMap;
public class StringBuilderInsertTest {
  public static void main(String[] args) {
    testInsertAPIs();
  }
  private static void testInsertAPIs() {
    StringBuilder sbuilder = new StringBuilder();
    // 插入字符数组
    sbuilder.insert(0, new char[]{'a','b','c','d','e'});
    // 插入部分字符数组(从索引0开始取3个)
    sbuilder.insert(0, new char[]{'A','B','C','D','E'}, 0, 3);
    // 插入不同类型的原生数据
    sbuilder.insert(0, 1.414f); 
    sbuilder.insert(0, 3.14159d);
    sbuilder.insert(0, true);
    sbuilder.insert(0, '\n');
    sbuilder.insert(0, 100);
    sbuilder.insert(0, 12345L);
    // 插入对象
    sbuilder.insert(0, new StringBuilder("StringBuilder"));
    sbuilder.insert(0, new StringBuilder("STRINGBUILDER"), 6, 13);
    sbuilder.insert(0, new StringBuffer("StringBuffer"));
    sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12);
    sbuilder.insert(0, "String");
    sbuilder.insert(0, "0123456789", 1, 6);
    sbuilder.insert(0, '\n');
    // 插入 Map 对象
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.insert(0, map);
    System.out.printf("%s\n\n", sbuilder);
  }
}

可观察结果:控制台打印出合并后的长字符串及 Map 内容的序列化形式。插入总是发生在索引 0 的位置,将之前的元素不断推向后方。

第3步:演示追加 (append) 相关 API

入口/代码:`StringBuilderAppendTest.java`

动作说明:append() 用于在序列末尾添加内容。除了常规数据类型,还可以使用 appendCodePoint() 追加 Unicode 编码对应的字符(如汉字)。


import java.util.HashMap;
public class StringBuilderAppendTest {
  public static void main(String[] args) {
    testAppendAPIs();
  }
  private static void testAppendAPIs() {
    StringBuilder sbuilder = new StringBuilder();
    sbuilder.append(new char[]{'a','b','c','d','e'});
    sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3);
    sbuilder.append(1.414f);
    sbuilder.append(3.14159d);
    sbuilder.append(true);
    sbuilder.append('\n');
    sbuilder.append(100);
    sbuilder.append(12345L);
    sbuilder.append(new StringBuilder("StringBuilder"));
    sbuilder.append(new StringBuilder("STRINGBUILDER"), 6, 13);
    sbuilder.append(new StringBuffer("StringBuffer"));
    sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12);
    sbuilder.append("String");
    sbuilder.append("0123456789", 1, 6);
    sbuilder.append('\n');
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.append(map);
    sbuilder.append('\n');
    // 追加特定 unicode 汉字
    sbuilder.appendCodePoint(0x5b57); // 字
    sbuilder.appendCodePoint(0x7b26); // 符
    sbuilder.appendCodePoint(0x7f16); // 编
    sbuilder.appendCodePoint(0x7801); // 码
    System.out.printf("%s\n\n", sbuilder);
  }
}

可观察结果:输出包含各类数字、字母、布尔值及由 Unicode 编码转换而来的“字符编码”字样。

第4步:演示替换 (replace) 及反转 API

入口/代码:`StringBuilderReplaceTest.java`

动作说明:replace(int start, int end, String str) 用来替换区间内的字符。另外展示了 reverse() 的反转功能和 setCharAt() 的单点修改功能。


public class StringBuilderReplaceTest {
  public static void main(String[] args) {
    testReplaceAPIs();
  }
  private static void testReplaceAPIs() {
    StringBuilder sbuilder;
    // 替换前3个字符
    sbuilder = new StringBuilder("0123456789");
    sbuilder.replace(0, 3, "ABCDE");
    System.out.printf("sbuilder=%s\n", sbuilder);
    
    // 翻转整个字符串
    sbuilder = new StringBuilder("0123456789");
    sbuilder.reverse();
    System.out.printf("sbuilder=%s\n", sbuilder);
    
    // 修改索引0处的字符为 'M'
    sbuilder = new StringBuilder("0123456789");
    sbuilder.setCharAt(0, 'M');
    System.out.printf("sbuilder=%s\n", sbuilder);
  }
}

可观察结果:

  • sbuilder=ABCDE3456789
  • sbuilder=9876543210
  • sbuilder=M123456789

第5步:演示删除 (delete) 及提取 API

入口/代码:`StringBuilderDeleteTest.java`

动作说明:使用 deleteCharAt(int index) 删除单个位置的字符,使用 delete(int start, int end) 删除区间字符。同时演示了如何基于现有 StringBuilder 提取子串 substring() 和 subSequence()。


public class StringBuilderDeleteTest {
  public static void main(String[] args) {
    testDeleteAPIs();
  }
  private static void testDeleteAPIs() {
    StringBuilder sbuilder = new StringBuilder("0123456789");
    // 删除索引0的字符
    sbuilder.deleteCharAt(0);
    // 删除索引3到6之间的字符
    sbuilder.delete(3, 6);
    
    String str1 = sbuilder.substring(1);
    String str2 = sbuilder.substring(3, 5);
    String str3 = (String)sbuilder.subSequence(3, 5);
    
    System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n", 
        sbuilder, str1, str2, str3);
  }
}

可观察结果:

  • sbuilder=123789
  • str1=23789
  • str2=78, str3=78

第6步:演示索引查找 (index) 相关 API

入口/代码:`StringBuilderIndexTest.java`

动作说明:演示如何使用 indexOf() 和 lastIndexOf() 从前向后或从后向前搜索子串的位置。


public class StringBuilderIndexTest {
  public static void main(String[] args) {
    testIndexAPIs();
  }
  private static void testIndexAPIs() {
    StringBuilder sbuilder = new StringBuilder("abcAbcABCabCaBcAbCaBCabc");
    System.out.printf("sbuilder=%s\n", sbuilder);
    // 1. 从头寻找 "bc"
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\")", sbuilder.indexOf("bc"));
    // 2. 从索引5之后寻找 "bc"
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\", 5)", sbuilder.indexOf("bc", 5));
    // 3. 倒序寻找 "bc"
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\")", sbuilder.lastIndexOf("bc"));
    // 4. 从索引4开始倒序寻找 "bc"
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\", 4)", sbuilder.lastIndexOf("bc", 4));
  }
}

可观察结果:

  • sbuilder.indexOf("bc") = 1
  • sbuilder.indexOf("bc", 5) = 22
  • sbuilder.lastIndexOf("bc") = 22
  • sbuilder.lastIndexOf("bc", 4) = 4

第7步:其它常见 API 操作演示

入口/代码:`StringBuilderOtherTest.java`

动作说明:获取总容量 capacity(),获取特定索引字符 charAt(),以及复制字符区域 getChars()。


public class StringBuilderOtherTest {
  public static void main(String[] args) {
    testOtherAPIs();
  }
  private static void testOtherAPIs() {
    StringBuilder sbuilder = new StringBuilder("0123456789");
    int cap = sbuilder.capacity();
    System.out.printf("cap=%d\n", cap);
    char c = sbuilder.charAt(6);
    System.out.printf("c=%c\n", c);
    char[] carr = new char[4];
    sbuilder.getChars(3, 7, carr, 0);
    for (int i=0; i

可观察结果:

  • cap=26 (默认初始长度10 + 预留16)
  • c=6
  • carr=[0]=3 carr[1]=4 carr[2]=5 carr[3]=6

完成判断与总结

将上述各步骤整合,可以编写一个综合示例程序(如 StringBuilderTest.java),按顺序调用上述所有测试函数,从而全面验证 StringBuilder 的各项特性。

总结:StringBuilder 提供了极其丰富的 API 以支持对字符串内容的任意变动。在处理大量字符串拼接、修改时,它能有效避免创建过多中间对象带来的性能损耗。只要遵循单线程环境下的使用规范,它将是 Java 开发者不可或缺的工具之一。

以上就是 Java StringBuilder 字符串操作方法及API整理的详细内容,更多关于 Java 字符串处理的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

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 算法库。