StringBuilder API

增 (Append & Insert)

这是最常用的功能,支持链式调用(Method Chaining)。

StringBuilder sb = new StringBuilder();

// 1. append(内容): 追加到末尾 (最常用)
// 相当于 C++ 的 += 或 push_back
sb.append("Hello");
sb.append(' ');
sb.append(123);
// 链式调用
sb.append(" World").append("!");

// 2. insert(索引, 内容): 插到指定位置
// 相当于 C++ 的 string::insert
sb.insert(0, "Start: "); // 在开头插入

2. 删 (Delete)

注意 Java 的区间通常是 左闭右开 [start, end)

// 假设 sb = "0123456"

// 1. deleteCharAt(int index): 删除指定位置的一个字符
// 相当于 C++ 的 erase(iterator)
sb.deleteCharAt(2); // 删除索引2的字符 ('2') -> "013456"

// 2. delete(int start, int end): 删除一段区间 [start, end)
// 包含 start,不包含 end
sb.delete(1, 3); // 删除索引12 -> "0456"

刷题技巧:用 StringBuilder 模拟字符栈

  • 入栈:sb.append(c)
  • 出栈:sb.deleteCharAt(sb.length() - 1)
  • 查看栈顶:sb.charAt(sb.length() - 1)
  • 这种写法比 Stack<Character> 快非常多!

3. 改 (Modify & Replace)

// 1. setCharAt(int index, char ch): 修改指定位置的字符
// 相当于 C++ 的 s[i] = 'a'
sb.setCharAt(0, 'X');

// 2. replace(int start, int end, String str): 替换一段区间的内容
sb.replace(0, 2, "AB"); // 把 [0, 2) 替换成 "AB"

// 3. reverse(): 反转字符串 (LeetCode 神器)
// C++ 需要 reverse(s.begin(), s.end()),Java 直接调这个
sb.reverse();

4. 查 (Query)

// 1. charAt(int index): 获取指定位置字符
// 相当于 C++ 的 s[i]
char c = sb.charAt(0);

// 2. length(): 获取长度
// 相当于 C++ 的 s.size()
int len = sb.length();

// 3. substring(int start, int end): 截取子串
// 注意:这会返回一个新的 String 对象,不改变 sb 本身
String sub = sb.substring(1, 4);
位置 API 复杂度 C++ 对应
查头 (Head) sb.charAt(0) \(O(1)\) s[0]s.front()
查尾 (Tail) sb.charAt(sb.length() - 1) \(O(1)\) s.back()

5. 转换与清空

// 1. toString(): 转回不可变的 String (最后输出结果用)
String result = sb.toString();

// 2. setLength(0): 清空 StringBuilder (最高效的方法)
// 相当于 C++ 的 s.clear()
sb.setLength(0);

总结速查表

操作 StringBuilder API C++ std::string 对应
追加 sb.append(x) s += xpush_back(x)
获取字符 sb.charAt(i) s[i]
修改字符 sb.setCharAt(i, c) s[i] = c
删除最后 sb.deleteCharAt(sb.length()-1) s.pop_back()
反转 sb.reverse() reverse(s.begin(), s.end())
长度 sb.length() s.size() or s.length()
转字符串 sb.toString() (本身就是 string)