共同学习Java源代码--常用工具类--AbstractStringBuilder(七)
2016-04-27 22:01
417 查看
public AbstractStringBuilder insert(int index, char[] str, int offset,
int len)
{
if ((index < 0) || (index > length()))
throw new StringIndexOutOfBoundsException(index);
if ((offset < 0) || (len < 0) || (offset > str.length - len))
throw new StringIndexOutOfBoundsException(
"offset " + offset + ", len " + len + ", str.length "
+ str.length);
ensureCapacityInternal(count + len);
System.arraycopy(value, index, value, index + len, count - index);
System.arraycopy(str, offset, value, index, len);
count += len;
return this;
}
这个方法是插入字符串的方法,有四个参数,第一个参数是要插入在哪个下标之后,第二个参数是要插入的字符数组,第三个是在参数数组的开始拷贝下标,第四个参数是要插入的长度。
首先判断下表是否越界,否则抛出异常。
然后给value扩容,扩大len个,也就是第四个参数那么大。
然后进行数组拷贝,先将value的index下标之后的元素拷贝到index和len之和下标处,拷贝count-index个元素,就是将原value数组的index之后的元素拷贝。
然后将参数数组从开始下标开始拷贝到value数组的index下标之后,拷贝len个。然后count自增len个。
最后返回本对象。
public AbstractStringBuilder insert(int offset, Object obj) {
return insert(offset, String.valueOf(obj));
}
public AbstractStringBuilder insert(int offset, String str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
if (str == null)
str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(value, offset);
count += len;
return this;
}
这两个方法一起看,第一个方法调用第二个方法,第一个方法将第二个参数转换成String传给第二个方法。
第二个方法先判断第一个参数是否越界,否则抛出异常。然后判断第二个字符串参数是否为空,如果为空的话将第二个参数设置为"null"。
然后给value扩容,扩大的容量是参数的长度。
获取参数长度,其值赋给变量len。
然后进行数组拷贝,将value数组的offset下标之后拷贝到value数组的offset+len下标之后,拷贝的长度count-offset个。
然后将参数拷贝到value的offset处。count自增len个。
最后返回本对象。
public AbstractStringBuilder insert(int offset, char[] str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
int len = str.length;
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
System.arraycopy(str, 0, value, offset, len);
count += len;
return this;
}
这个方法和上面的很相似就是少了参数,不多赘述了。
int len)
{
if ((index < 0) || (index > length()))
throw new StringIndexOutOfBoundsException(index);
if ((offset < 0) || (len < 0) || (offset > str.length - len))
throw new StringIndexOutOfBoundsException(
"offset " + offset + ", len " + len + ", str.length "
+ str.length);
ensureCapacityInternal(count + len);
System.arraycopy(value, index, value, index + len, count - index);
System.arraycopy(str, offset, value, index, len);
count += len;
return this;
}
这个方法是插入字符串的方法,有四个参数,第一个参数是要插入在哪个下标之后,第二个参数是要插入的字符数组,第三个是在参数数组的开始拷贝下标,第四个参数是要插入的长度。
首先判断下表是否越界,否则抛出异常。
然后给value扩容,扩大len个,也就是第四个参数那么大。
然后进行数组拷贝,先将value的index下标之后的元素拷贝到index和len之和下标处,拷贝count-index个元素,就是将原value数组的index之后的元素拷贝。
然后将参数数组从开始下标开始拷贝到value数组的index下标之后,拷贝len个。然后count自增len个。
最后返回本对象。
public AbstractStringBuilder insert(int offset, Object obj) {
return insert(offset, String.valueOf(obj));
}
public AbstractStringBuilder insert(int offset, String str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
if (str == null)
str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(value, offset);
count += len;
return this;
}
这两个方法一起看,第一个方法调用第二个方法,第一个方法将第二个参数转换成String传给第二个方法。
第二个方法先判断第一个参数是否越界,否则抛出异常。然后判断第二个字符串参数是否为空,如果为空的话将第二个参数设置为"null"。
然后给value扩容,扩大的容量是参数的长度。
获取参数长度,其值赋给变量len。
然后进行数组拷贝,将value数组的offset下标之后拷贝到value数组的offset+len下标之后,拷贝的长度count-offset个。
然后将参数拷贝到value的offset处。count自增len个。
最后返回本对象。
public AbstractStringBuilder insert(int offset, char[] str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
int len = str.length;
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
System.arraycopy(str, 0, value, offset, len);
count += len;
return this;
}
这个方法和上面的很相似就是少了参数,不多赘述了。
相关文章推荐
- 开发测试时给 Kafka 发消息的 UI 发送器――Mikasa
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
- leetcode-303. Range Sum Query - Immutable
- Android 图文混排spannableStringBuilder简单使用
- IDEA 主题、字体、编辑区主题、文件编码修改
- 设置UITabBarController的用法
- js/jquer获取web页面上传文件的大小
- sdut 2605 Mountain Subsequences(树状数组)
- Implement Stack using Queues
- xcode7.3出现the behavior of the UICollectionViewFlowLayout is not defined警告
- Codeforces--237E--Build String(最小费用流)
- note:debugging requires the debug connect session system privilege
- RxJS入门(4)----深入Sequence
- sql gui 工具
- 自定义UITableViewCell左滑显示编辑按钮
- phalcon builder get raw sql
- iOS UI调试神器,插件injection for Xcode使用方法
- 完美限制UITextField的输入长度
- Codeforces Beta Round #11 A. Increasing Sequence 贪心
- 线程池.(Executors,ThreadPoolExecutor,BlockingQueue,RejectedExecutionHandler).介绍