}
public AbstractStringBuilder append(long l) {
if (l == Long.MIN_VALUE) {
append("-9223372036854775808");
return this;
}
int appendedLength = (l < 0) ? Long.stringSize(-l) + 1
: Long.stringSize(l);
int spaceNeeded = count + appendedLength;
ensureCapacityInternal(spaceNeeded);
Long.getChars(l, spaceNeeded, value);
count = spaceNeeded;
return this;
}
这两个方法一起看就行了,就是拼接int和long的。这两个方法都是先判断参数是否是这两个数据类型的最小值,如果是的话,直接拼接一个常量并返回。
然后计算要拼接的字符数,如果要拼接的是负数那么要拼接的字符数就是2,否则就是1。
然后给value扩容,然后将参数复制到扩容后的value中,然后为count赋值,最后返回本对象。
public AbstractStringBuilder append(float f) {
FloatingDecimal.appendTo(f,this);
return this;
}
public AbstractStringBuilder append(double d) {
FloatingDecimal.appendTo(d,this);
return this;
}
这两个方法是拼接浮点数,调用各自的方法,然后再返回本对象。
public AbstractStringBuilder delete(int start, int end) {
if (start < 0)
throw new StringIndexOutOfBoundsException(start);
if (end > count)
end = count;
if (start > end)
throw new StringIndexOutOfBoundsException();
int len = end - start;
if (len > 0) {
System.arraycopy(value, start+len, value, start, count-end);
count -= len;
}
return this;
}
这个方法是删除指定区间内字符的方法。就是将指定区间之后的字符复制到指定区间开始处。
public AbstractStringBuilder appendCodePoint(int codePoint) {
final int count = this.count;
if (Character.isBmpCodePoint(codePoint)) {
ensureCapacityInternal(count + 1);
value[count] = (char) codePoint;
this.count = count + 1;
} else if (Character.isValidCodePoint(codePoint)) {
ensureCapacityInternal(count + 2);
Character.toSurrogates(codePoint, value, count);
this.count = count + 2;
} else {
throw new IllegalArgumentException();
}
return this;
}
这个方法是拼接代码点的方法。先判断是否是BMP代码点,如果是就将value扩容,然后将参数拼接在value的结尾,然后count自加一。如果是有效的代码点,那么先给value扩容两位,然后调用Character类的方法将参数拼接在value后面,然后count自加二。
最后返回本对象。