阅读(3977) (7)

鸿蒙OS StringBuffer

2022-04-28 16:02:22 更新

StringBuffer

java.lang.Object

|---java.lang.StringBuffer

public final class StringBuffer
extends Object
implements Appendable, CharSequence, Serializable

一个线程安全的、可变的字符序列。字符串缓冲区类似于字符串,但可以修改。在任何时候它都包含一些特定的字符序列,但是序列的长度和内容可以通过某些方法调用来改变。

字符串缓冲区可以安全地被多个线程使用。这些方法在必要时同步,以便任何特定实例上的所有操作都表现得好像它们以某种串行顺序发生,该顺序与所涉及的每个单独线程进行的方法调用的顺序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,它们被重载以便接受任何类型的数据。每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区。 append 方法总是将这些字符添加到缓冲区的末尾; insert 方法在指定点添加字符。

例如,如果 z 引用当前内容为“start”的字符串缓冲区对象,则方法调用 z.append(“le”) 将导致字符串缓冲区包含“startle”,而 z.insert(4, " le") 将更改字符串缓冲区以包含“starlet”。

一般来说,如果 sb 引用一个 StringBuffer 的实例,那么 sb.append(x) 与 sb.insert(sb.length(), x) 具有相同的效果。

每当发生涉及源序列的操作(例如从源序列追加或插入)时,此类仅在执行操作的字符串缓冲区上同步,而不在源上同步。请注意,虽然 StringBuffer 旨在安全地从多个线程同时使用,但如果向构造函数或追加或插入操作传递了跨线程共享的源序列,则调用代码必须确保该操作具有一致且不变的视图操作期间的源序列。这可以通过在操作调用期间持有锁的调用者来满足,通过使用不可变的源序列,或者不跨线程共享源序列。

每个字符串缓冲区都有一个容量。只要字符串缓冲区包含的字符序列的长度不超过容量,就不需要分配新的内部缓冲区数组。如果内部缓冲区溢出,它会自动变大。

除非另有说明,否则将 null 参数传递给此类中的构造函数或方法将导致抛出 NullPointerException。

从 JDK 5 开始,该类已经补充了一个为单线程使用而设计的等效类 StringBuilder。通常应优先使用 StringBuilder 类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

构造函数总结

构造函数 描述
StringBuffer() 构造一个字符串缓冲区,其中没有字符,初始容量为 16 个字符。
StringBuffer(int capacity) 构造一个没有字符且具有指定初始容量的字符串缓冲区。
StringBuffer(CharSequence seq) 构造一个字符串缓冲区,该缓冲区包含与指定 CharSequence 相同的字符。
StringBuffer(String str) 构造一个字符串缓冲区,初始化为指定字符串的内容。

方法总结

修饰符和类型 方法 描述
StringBuffer append(boolean b)
StringBuffer append(char c) 将指定的字符附加到此 Appendable。
StringBuffer append(char[] str)
StringBuffer append(char[] str, int offset, int len)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long lng)
StringBuffer append(CharSequence s) 将指定的 CharSequence 附加到此序列。
StringBuffer append(CharSequence s, int start, int end) 将指定字符序列的子序列附加到此 Appendable。
StringBuffer append(Object obj)
StringBuffer append(String str)
StringBuffer append(StringBuffer sb) 将指定的 StringBuffer 附加到此序列。
StringBuffer appendCodePoint(int codePoint)
int capacity()
char charAt(int index) 返回指定索引处的 char 值。
int codePointAt(int index)
int codePointBefore(int index)
int codePointCount(int beginIndex, int endIndex)
StringBuffer delete(int start, int end)
StringBuffer deleteCharAt(int index)
void ensureCapacity(int minimumCapacity)
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
int indexOf(String str)
int indexOf(String str, int fromIndex)
StringBuffer insert(int offset, boolean b)
StringBuffer insert(int offset, char c)
StringBuffer insert(int offset, char[] str)
StringBuffer insert(int index, char[] str, int offset, int len)
StringBuffer insert(int offset, double d)
StringBuffer insert(int offset, float f)
StringBuffer insert(int offset, int i)
StringBuffer insert(int offset, long l)
StringBuffer insert(int dstOffset, CharSequence s)
StringBuffer insert(int dstOffset, CharSequence s, int start, int end)
StringBuffer insert(int offset, Object obj)
StringBuffer insert(int offset, String str)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
int length() 返回此字符序列的长度。
int offsetByCodePoints(int index, int codePointOffset)
StringBuffer replace(int start, int end, String str)
StringBuffer reverse()
void setCharAt(int index, char ch)
void setLength(int newLength)
CharSequence subSequence(int start, int end) 返回作为此序列子序列的 CharSequence。
String substring(int start)
String substring(int start, int end)
String toString() 返回对象的字符串表示形式。
void trimToSize()
从接口 java.lang.CharSequence 继承的方法
chars, codePoints
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

构造函数详细信息

StringBuffer

public StringBuffer()

构造一个字符串缓冲区,其中没有字符,初始容量为 16 个字符。

StringBuffer

public StringBuffer(int capacity)

构造一个没有字符且具有指定初始容量的字符串缓冲区。

参数:

参数名称 参数描述
capacity 初始容量。

Throws:

Throw名称 Throw描述
NegativeArraySizeException 如果容量参数小于 0。

StringBuffer

public StringBuffer(String str)

构造一个字符串缓冲区,初始化为指定字符串的内容。 字符串缓冲区的初始容量是 16 加上字符串参数的长度。

参数:

参数名称 参数描述
str 缓冲区的初始内容。

StringBuffer

public StringBuffer(CharSequence seq)

构造一个字符串缓冲区,该缓冲区包含与指定 CharSequence 相同的字符。 字符串缓冲区的初始容量是 16 加上 CharSequence 参数的长度。

如果指定的 CharSequence 的长度小于或等于 0,则返回容量为 16 的空缓冲区。

参数:

参数名称 参数描述
seq 要复制的序列。

方法详情

length

public int length()

从接口复制的描述:CharSequence

返回此字符序列的长度。 长度是序列中 16 位字符的数量。

指定者:

接口 CharSequence 中的长度

返回:

此序列中的字符数

capacity

public int capacity()

ensureCapacity

public void ensureCapacity(int minimumCapacity)

trimToSize

public void trimToSize()

setLength

public void setLength(int newLength)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

charAt

public char charAt(int index)

从接口复制的描述:CharSequence

返回指定索引处的 char 值。 索引范围从零到 length() - 1。序列的第一个 char 值在索引 0 处,下一个在索引 1 处,依此类推,与数组索引一样。

如果索引指定的 char 值是代理项,则返回代理项值。

指定者:

接口 CharSequence 中的 charAt

参数:

参数名称 参数描述
index 要返回的 char 值的索引

返回:

指定的字符值

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException 如果 index 参数为负数或不小于 length()

codePointAt

public int codePointAt(int index)

codePointBefore

public int codePointBefore(int index)

codePointCount

public int codePointCount(int beginIndex, int endIndex)

offsetByCodePoints

public int offsetByCodePoints(int index, int codePointOffset)

getChars

public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

setCharAt

public void setCharAt(int index, char ch)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

append

public StringBuffer append(Object obj)

append

public StringBuffer append(String str)

append

public StringBuffer append(StringBuffer sb)

将指定的 StringBuffer 附加到此序列。

StringBuffer 参数的字符按顺序附加到此 StringBuffer 的内容,使此 StringBuffer 的长度增加参数的长度。 如果 sb 为 null,则将四个字符“null”附加到此 StringBuffer。

设 n 为旧字符序列的长度,即在执行 append 方法之前包含在 StringBuffer 中的字符序列。 那么如果k小于n,则新字符序列中索引k处的字符等于旧字符序列中索引k处的字符; 否则,它等于参数 sb 中索引 k-n 处的字符。

此方法在目标对象 this 上同步,但在源 (sb) 上不同步。

参数:

参数名称 参数描述
sb 要附加的 StringBuffer。

返回:

对该对象的引用。

append

public StringBuffer append(CharSequence s)

将指定的 CharSequence 附加到此序列。

CharSequence 参数的字符按顺序附加,该序列的长度增加了参数的长度。

此方法的结果与调用 this.append(s, 0, s.length()); 完全相同。

此方法在目标对象 this 上同步,但在源对象上不同步。

如果 s 为 null,则附加四个字符“null”。

指定者:

在接口 Appendable 中追加

参数:

参数名称 参数描述
s 要附加的 CharSequence。

返回:

对该对象的引用。

append

public StringBuffer append(CharSequence s, int start, int end)

从接口复制的描述:可附加

将指定字符序列的子序列附加到此 Appendable。

当 csq 不为空时,以 out.append(csq, start, end) 形式调用此方法的行为与调用完全相同

     out.append(csq.subSequence(start, end)) 

指定者:

在接口 Appendable 中追加

参数:

参数名称 参数描述
s 从中追加子序列的字符序列。 如果 csq 为 null,则将附加字符,就好像 csq 包含四个字符“null”。
start 子序列中第一个字符的索引
end 子序列中最后一个字符之后的字符的索引

返回:

对本附录的引用

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException 如果 start 或 end 为负数,则 start 大于 end,或者 end 大于 csq.length()

append

public StringBuffer append(char[] str)

append

public StringBuffer append(char[] str, int offset, int len)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

append

public StringBuffer append(boolean b)

append

public StringBuffer append(char c)

从接口复制的描述:可附加

将指定的字符附加到此 Appendable。

指定者:

在接口 Appendable 中追加

参数:

参数名称 参数描述
c 要附加的字符

返回:

对本附录的引用

append

public StringBuffer append(int i)

appendCodePoint

public StringBuffer appendCodePoint(int codePoint)

append

public StringBuffer append(long lng)

append

public StringBuffer append(float f)

append

public StringBuffer append(double d)

delete

public StringBuffer delete(int start, int end)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

deleteCharAt

public StringBuffer deleteCharAt(int index)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

replace

public StringBuffer replace(int start, int end, String str)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

substring

public String substring(int start)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

subSequence

public CharSequence subSequence(int start, int end)

从接口复制的描述:CharSequence

返回作为此序列子序列的 CharSequence。 子序列以指定索引处的 char 值开始,以索引 end - 1 处的 char 值结束。返回序列的长度(以字符为单位)为 end - start,因此如果 start == end 则返回空序列 .

指定者:

接口 CharSequence 中的子序列

参数:

参数名称 参数描述
start 起始索引,包括
end 结束索引,独占

返回:

指定的子序列

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException 如果 start 或 end 为负数,如果 end 大于 length(),或者如果 start 大于 end

substring

public String substring(int start, int end)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int index, char[] str, int offset, int len)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, Object obj)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, String str)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, char[] str)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int dstOffset, CharSequence s)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

insert

public StringBuffer insert(int dstOffset, CharSequence s, int start, int end)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

insert

public StringBuffer insert(int offset, boolean b)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, char c)

Throws:

Throw名称 Throw描述
IndexOutOfBoundsException

insert

public StringBuffer insert(int offset, int i)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, long l)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, float f)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

insert

public StringBuffer insert(int offset, double d)

Throws:

Throw名称 Throw描述
StringIndexOutOfBoundsException

indexOf

public int indexOf(String str)

indexOf

public int indexOf(String str, int fromIndex)

lastIndexOf

public int lastIndexOf(String str)

lastIndexOf

public int lastIndexOf(String str, int fromIndex)

reverse

public StringBuffer reverse()

toString

public String toString()

从类复制的描述:对象

返回对象的字符串表示形式。 通常,toString 方法返回一个“以文本方式表示”该对象的字符串。 结果应该是一个简洁但信息丰富的表示,易于人们阅读。 建议所有子类重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。 换句话说,此方法返回一个等于以下值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode()) 

指定者:

接口 CharSequence 中的 toString

覆盖:

类 Object 中的 toString

返回:

对象的字符串表示形式。