重复项去除:使用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
相关产品推荐
相关产品推荐

