You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重复项去除:使用StringBuilder删除字符后后续字符是否移位?

关于StringBuilder删除字符后后续字符移位的问题

嘿,这个问题问得很实在!咱们直接拿你举的"Hello"例子一步步拆解,就能一目了然了。

首先,先明确初始状态:当你把"Hello"放进StringBuilder里时,它内部的字符索引分布是这样的:

  • 索引0: H
  • 索引1: e
  • 索引2: l(第一个l)
  • 索引3: l(第二个l)
  • 索引4: o

当你调用sb.deleteCharAt(2)(这是删除指定索引单个字符的正确方法)删除索引2处的"l"时,StringBuilder会立即把被删除位置之后的所有字符向前移动一位,来填补空缺。

具体到这个例子:

  • 原本在索引3的第二个"l",会直接移到索引2的位置;
  • 原本在索引4的"o",会移到索引3的位置;
  • 整个StringBuilder的长度从5变成4,内容变成Helo。

你可以用一段简单的代码验证这个过程:

public class StringBuilderTest {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        System.out.println("删除前:" + sb + ",索引2的字符:" + sb.charAt(2));
        // 输出:删除前:Hello,索引2的字符:l
        
        sb.deleteCharAt(2);
        
        System.out.println("删除后:" + sb + ",索引2的字符:" + sb.charAt(2));
        // 输出:删除后:Helo,索引2的字符:l
    }
}

说白了,StringBuilder的底层是一个可变的字符数组,删除某个位置的字符后,后面的元素必然会向前移位,不然就会留下空位,这不符合它的设计逻辑。所以你的问题答案是肯定的——删除操作完成后,下一个"l"确实会移动到之前被删除的索引2的位置。

内容的提问来源于stack exchange,提问作者user9480515

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:02