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

引言

  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);

    }}结果

源码分析

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

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

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

  2.deleteCharAt(int index)源码分析

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

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

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

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

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

原文地址:https://www.cnblogs.com/shicelaya/p/11273712.html

时间: 2024-10-14 04:07:49

StringBuffer类的delete()方法和deleteCharAt()方法的区别的相关文章

laravel中delete()方法和destroy()方法的区别

delete()方法是实例方法,需要查询到相应的数据并通过模型实例调用 destroy()方法可以直接调用,通过索引删除记录 举个栗子: 1 /*delete()方法删除*/ 2 //先查找记录 3 $blog = Blog::find(1); 4 if($blog){ 5 //再删除记录 6 if($blog->delete()){ 7 echo "删除成功!"; 8 }else{ 9 echo '删除失败!'; 10 } 11 }else{ 12 echo "文章不

Thread类的interrupted方法和isInterrupted方法的区别

如下所示,interrupted()会改变线程的中断状态(清除),而isInterrupted()不影响线程的中断状态   1 /** * Tests whether the current thread has been interrupted. The * <i>interrupted status</i> of the thread is cleared by this method. In * other words, if this method were to be c

2016/05/23 thinkphp M方法和D方法的区别

M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 M方法: 对数据表进行简单的 CURD 操作而无复杂的业务逻辑时 只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用 M方法 甚至可以简单看着就是对参数表名对应的数据表的操作: $User = M('User'); 使用D方法 如果是如下情况,请考虑使

问题:ExecuteNonQuery 与 ExecuteScalar 结果: ExecuteNonQuery方法和ExecuteScalar方法的区别

ExecuteNonQuery方法和ExecuteScalar方法的区别 ----ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加.删除和更新),那么方法将返回操作所影响的记录条数. ----ExecuteScalar():执行命令对象的SQL语句,如果SQL语句是SELECT查询,则仅仅返回查询结果集中的第1行第1列,而忽略 其他的行 和列.该方法所返回的结果为object类型,在使用之前必须强制转换为所

ThinkPHP的D方法和M方法的区别

M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 M方法: 对数据表进行简单的 CURD 操作而无复杂的业务逻辑时只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用M方法 甚至可以简单看着就是对参数表名对应的数据表的操作: $User = M('User'); 使用D方法 如果是如下情况,请考虑使用

sleep()方法和wait()方法的区别

1.来源不同: sleep()方法来自于 Thread 类的一个静态方法, 只有继承了线程类的子类才能调用该方法,且谁调用的谁去睡觉,即使在 A 线程里调用了 B 的sleep方法,实际上还是 A 去睡觉,要让 B 线程睡觉要在 B 的代码中调用sleep. 1 static void sleep(long millis); //在指定的毫秒数内对当前正在执行的线程进行休眠操作 2 static void sleep(long millis, int nanos); //在指定的毫秒加纳秒内对当

sleep()方法和wait()方法的区别? sleep()方法和yield()方法的区别?

sleep()方法和wait()方法的区别? sleep方法是Thread的静态方法,wait方法是Object类的普通方法 sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的) wait方法用于线程间通信,而sleep方法用于短暂的暂停线程 sleep针对当前线程,而wait针对被同步代码块加锁的对象 sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待 调用wait方法会暂停线程,当前线程释放对象的

详解HTTP请求:get方法和post方法的区别

在讨论get方法和post方法的区别时,我们经常会提到两点: 1.get传送的数据量较小,不能大于2KB,而post传送的数据量较大,一般被默认为不受限制: 2.get安全性非常低,但是post安全性较高: 究其根本,为什么呢?就需要提到http报文以及http报文的格式. 首先我们先看一下HTTP请求报文的通用格式: 在<计算机网络--自顶向下方法>一书中提到很关键的两句话: 使用get方法时实体主体为空,而使用post方法时才使用. HTML表单经常使用GET方法,将输入数据(在表单字段)

jquery中prop()方法和attr()方法的区别

jquery1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 大家都知道有的浏览器只要写disabled,checked就可以了,而有的要写成disabled = "disabled",checked="checked",比如用attr("checked")获取checkbox的checked属性时选中的时候可以取到值,值为"checked"但没选中获取值就是un