stringbuilder 的 reverse() 和 delete() 方法高效处理字符串反转与剪裁,因直接操作内部字符数组、避免中间对象创建;reverse() 原地 o(n) 反转并支持链式调用,delete() 精准删除区间且性能优于 replace。

Java 中用 StringBuilder 的 reverse() 和 delete() 方法处理字符串反转与剪裁,既高效又简洁——因为它们直接在内部字符数组上操作,不产生中间字符串对象,避免了 String 不可变性带来的开销。
用 reverse() 快速反转整个字符串或局部片段
reverse() 是原地反转,时间复杂度 O(n),比手动循环或使用 StringBuffer 更轻量(除非多线程场景才需考虑线程安全)。注意它返回的是当前 StringBuilder 对象本身,支持链式调用。
- 反转整个字符串:
new StringBuilder("hello").reverse().toString()→"olleh" - 若只想反转某一段,可先用
substring()提取,再反转拼接;但更高效的做法是:截取对应区间,用reverse()配合delete()和insert()替换原位置。例如反转索引 2~5 的子串:
StringBuilder sb = new StringBuilder("abcdefgh");
String sub = sb.substring(2, 6); // "cdef"
sb.replace(2, 6, new StringBuilder(sub).reverse().toString()); // → "abfedcgh"
用 delete() 精准删除指定范围的字符
delete(int start, int end) 删除从 start(含)到 end(不含)之间的字符,比用 replace(start, end, "") 更直观、性能略优(少一次空字符串创建)。关键点是下标边界必须合法,否则抛 StringIndexOutOfBoundsException。
- 删除开头 3 个字符:
sb.delete(0, 3) - 删除末尾 2 个字符:
sb.delete(sb.length() - 2, sb.length()) - 删除中间某段后,长度自动更新,后续操作需重新计算下标(不要复用旧索引)
组合 reverse + delete 实现常见剪裁反转需求
比如「去掉首尾空格后再反转」或「保留前 n 位并反转」这类任务,组合调用比多次新建 String 更省内存。
- 去首尾空格再反转:
new StringBuilder(str.trim()).reverse().toString() - 只反转前 4 位,其余不变:
StringBuilder sb = new StringBuilder(str); sb.replace(0, 4, sb.substring(0, 4).reverse()); - 删除第 i 位字符(单个):
sb.delete(i, i + 1),比sb.deleteCharAt(i)语义更统一,且后者本质也是调用delete(i, i+1)
注意事项和性能提醒
虽然 StringBuilder 操作高效,但仍有几个易错点:
-
delete()的end参数不能超过当前长度,建议先判断sb.length() -
reverse()不影响容量(capacity),但频繁增删后可调用trimToSize()回收多余空间 - 如果只是临时用一次,推荐链式写法(如
new StringBuilder(s).delete(0,2).reverse().toString()),避免冗余变量 - 别在循环里反复创建
StringBuilder实例处理大量字符串——应复用实例或考虑String的chars()+Collectors.joining()等流式方案(适合函数式风格)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











