在处理字符串变更时,StringBuffer和StringBuilder类是优选工具。与String类不同,StringBuffer和StringBuilder允许对象被多次修改,而不会生成新的未使用对象。
StringBuilder类自Java 5起引入,其与StringBuffer的主要区别在于StringBuilder的方法不提供线程安全保障(线程安全意味着在多线程环境下,通过加锁机制保护数据访问,确保当一个线程正在访问数据时,其他线程不能进行访问,以保持数据一致性和防止污染。相对地,线程不安全则意味着缺乏这种保护,可能导致多线程环境下数据被不一致地修改)。
由于StringBuilder在性能上优于StringBuffer,因此在大多数情况下推荐使用StringBuilder。但如果应用需要线程安全,则必须选择StringBuffer。
以下是一个示例代码:
public class Test {
public static void main(String args[]) {
StringBuffer sBuffer = new StringBuffer("test");
sBuffer.append(" String Buffer");
System.out.println(sBuffer);
}
}
运行上述代码,输出结果将是:
test String Buffer
以下是 StringBuffer 类支持的主要方法:
序号 | 方法描述 |
---|---|
1 | public StringBuffer append(String s) <br> 将指定的字符串追加到当前字符序列。 |
2 | public StringBuffer reverse() <br> 将当前字符序列反转。 |
3 | public StringBuffer delete(int start, int end) <br> 删除从 start 到 end-1 范围内的子字符串。 |
4 | public StringBuffer insert(int offset, int i) <br> 在指定位置插入整数 i 的字符串表示形式。 |
5 | public StringBuffer replace(int start, int end, String str) <br> 使用给定的字符串 str 替换从 start 到 end-1 范围内的子字符串。 |
以下方法与 String 类的方法类似:
序号 | 方法描述 |
---|---|
1 | int capacity() <br> 返回当前容量。 |
2 | char charAt(int index) <br> 返回指定索引处的字符。 |
3 | void ensureCapacity(int minimumCapacity) <br> 确保容量至少等于指定的最小值。 |
4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) <br> 将字符从此序列复制到目标字符数组 dst 。 |
5 | int indexOf(String str) <br> 返回指定子字符串第一次出现的索引。 |
6 | int indexOf(String str, int fromIndex) <br> 从指定索引开始,返回指定子字符串第一次出现的索引。 |
7 | int lastIndexOf(String str) <br> 返回指定子字符串最后一次出现的索引。 |
8 | int lastIndexOf(String str, int fromIndex) <br> 从指定索引开始,返回指定子字符串最后一次出现的索引。 |
9 | int length() <br> 返回字符序列的长度(字符数)。 |
10 | void setCharAt(int index, char ch) <br> 将指定索引处的字符设置为 ch 。 |
11 | void setLength(int newLength) <br> 设置字符序列的长度。 |
12 | CharSequence subSequence(int start, int end) <br> 返回一个新的字符序列,该序列是此序列的子序列。 |
13 | String substring(int start) <br> 返回一个新的字符串,包含从 start 开始的子序列。 |
14 | String substring(int start, int end) <br> 返回一个新的字符串,包含从 start 到 end-1 的子序列。 |
15 | String toString() <br> 返回此字符序列的字符串表示形式。 |