StringBuffer类的delete()方法和deleteCharAt()方法的区别

411 阅读1分钟

引言

  StringBuffer类的delete()方法和deleteCharAt()方法都是用来删除StringBuffer字符串中的字符

区别

  1.对于delete(int start,int end)这个方法一共有两个参数是int类型的,代表从索引下标start删除字符到索引下标end字符,但是不包括end

  2.对于StringBuffer中的deleteCharAt(int index)方法:只有一个参数,使用时删除索引为index的字符

public class StringBufferTest {
    public static void main(String[] args){
        StringBuffer sb = new StringBuffer("012345");
        // 删除索引1-2的字符,但是不包括2
        StringBuffer delete = sb.delete(1, 2);
        System.out.println(delete);
        StringBuffer stringBuffer = new StringBuffer("012345");
        // 删除索引为4的字符
        StringBuffer deleteCharAt = sb.deleteCharAt(4);
        System.out.println(deleteCharAt);

    }
}

image-20210714220530573.png

源码分析

  1.delete(int start,int end)源码分析

image-20210714223912071.png StringBuffer类中delete(int start, int end)这个方法是调用其父类AbstractStringBuilder中的delete(int start, int end)方法,代码如下

image-20210714223941361.png 首先判断start是否小于0,小于0抛出异常。再判断end是否大于StringBuffer中字符使用了的长度,是那么end就等于count。再判断end是否大于start,是抛出异常。len是StringBuffer中删除字符的长度 最后调用System.arraycopy(value, start+len, value, start, count-end)这个方法复制字符数组,value代表原数组,srcPos代表复制的起始位置,value代表目标数组,start代表目标数组起始位置, length代表复制的长度

image.png

  2.deleteCharAt(int index)源码分析!

image-20210714220628477.png

StringBuffer类中delete(int start, int end)这个方法是调用其父类AbstractStringBuilder中的deleteCharAt(int index)方法,代码如下

image.png 首先判断index是否小于0或者大于count,条件成立抛出异常

然后使用System.arraycopy(value, index+1, value, index, count-index-1);这个方法复制字符数组

最后count--,字符使用的长度减一