stringbuilder的delete删除指定区间字符(start含、end不含),deletecharat仅删单个指定索引字符;前者要求start≤end且end不超过长度,后者要求0≤index<length。

StringBuilder 的 delete 和 deleteCharAt 都用于移除字符串中的字符,但作用范围不同:前者删一段(区间),后者只删一个指定位置的字符。
delete(int start, int end):删除指定区间的字符
从索引 start(包含)开始,到索引 end(不包含)结束,删除中间所有字符。注意 end 不能超过当前长度,且 start ≤ end,否则抛 StringIndexOutOfBoundsException。
- 如果
start == end,相当于不删任何字符(合法) - 删除后,后续字符自动前移,长度减少
end - start - 常用场景:清除某段内容、截掉末尾多余字符、批量替换前先删除
例子:StringBuilder sb = new StringBuilder("HelloWorld");<br>
sb.delete(5, 10); // 删除索引5~9(即"World")<br>
System.out.println(sb); // 输出 "Hello"
deleteCharAt(int index):删除单个指定位置的字符
删除索引为 index 处的单个字符。要求 0 ≤ index ,越界会抛异常。
- 效果等价于
delete(index, index + 1) - 适合精准删掉某个位置的符号、空格、错误字符等
- 多次调用时要注意索引动态变化(删前面会影响后面字符的位置)
例子:StringBuilder sb = new StringBuilder("abcde");<br>
sb.deleteCharAt(2); // 删除索引2处的'c'<br>
System.out.println(sb); // 输出 "abde"
常见误区和注意事项
- 索引从 0 开始,别把“第几个字符”直接当索引(比如想删第3个,实际用
index=2) - 删除操作会改变原对象,无需重新赋值;但方法返回的是
this,支持链式调用 - 删除后若需继续操作,建议检查当前长度(
length()),避免越界 - 不要在循环中用固定索引反复删多个字符(如删所有 'a'),容易跳过或越界;推荐倒序删或用
replace替代
简单对比小结
想删连续一段 → 用 delete(start, end)
只想删某一个位置的字符 → 用 deleteCharAt(index)
两者都不改变 StringBuilder 的引用,都是就地修改。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











