一枚正经的程序员

一枚正经的程序员

引言

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

区别

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

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

代码及结果如下图所示

package StringTest;

/**
* @auther cela
* @date 2019/7/31 9:58
*/
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);

}
}
结果

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

源码分析

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

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

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

首先判断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代表复制的长度

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

  2.deleteCharAt(int index)源码分析

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

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

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

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

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

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


结语
  由于这是我第一篇博客,可能会出现许多问题,欢迎大家在下方评论,提出宝贵的意见
07-31 16:36