Java中StringBuffer类的常用方法详解与使用示例
Java中的String对象一旦创建便不可修改,而StringBuffer提供了可变的字符序列。本文整理了StringBuffer的核心方法,包括append、insert、reverse、replace、substring、delete和indexOf等,并通过具体代码示例展示各方法的实际操作结果,同时解析其与String的本质区别。
StringBuffer类概述
在Java编程中,String对象是不可变的(Immutable),每次对字符串进行修改都会创建新的对象,这在频繁拼接场景下会影响性能。StringBuffer类提供了可变的字符序列,允许直接修改内容,且是线程安全的。以下是其最常用的操作方法。
第1步:初始化与追加内容
StringBuffer可以通过无参构造函数或传入初始字符串来实例化。追加内容通常使用append方法,支持追加char、String或其他StringBuffer对象。追加后原对象内容改变,返回对象自身以便链式调用。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("456");
a.append("qwe");
System.out.println(a);
}
}
第2步:在指定位置插入内容
若需在字符串中间插入文本,使用insert(int offset, String str)方法。该方法将字符串插入到指定的索引位置,后续字符自动后移。注意索引从0开始。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("456");
a.insert(1, "asd");
System.out.println(a);
}
}
第3步:反转字符串内容
使用reverse()方法可以将当前字符序列倒序排列。这是一个原地修改操作,直接改变对象状态并返回引用。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("456");
System.out.println(a.reverse());
}
}
第4步:替换指定范围的内容
replace(int start, int end, String str)用于用新字符串替换旧范围的内容。需要注意的是,截断替换遵循“左闭右开”原则,即包含起始位置start,不包含结束位置end。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("456");
// 替换索引1到2之间的内容(即'5'),不覆盖'6'
a.replace(1, 2, "ABCDE");
System.out.println(a);
}
}
替换的范围 不包含结束的值
第5步:截取子字符串
虽然StringBuffer是可变的,但substring方法会返回一个不可变的String对象。同样遵循左闭右开区间。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("0123456");
// 截取索引1到4的内容:'1', '2', '3' (不包含4)
String b = a.substring(1, 4);
System.out.println(b);
}
}
截取的范围 不包含结束的值
第6步:删除指定范围的字符串
使用delete(int start, int end)移除指定区间的字符,结果仍为StringBuffer类型,通常需要调用toString()转为String进行打印或其他处理。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("0123456");
// 删除索引1到4之间的内容
String b = a.delete(1, 4).toString();
System.out.println(b);
}
}
删除的范围 不包含结束的值
第7步:查找指定的内容是否存在
通过indexOf(String str)可以查找子串第一次出现的索引。如果找到,返回对应的位置;如果未找到,则返回-1。
public class Hello {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("0123456");
System.out.println(a.indexOf("6"));
System.out.println(a.indexOf("d"));
}
}
查找到了,则返回内容的位置;没有查找到,则返回-1
String与StringBuffer的区别
- 可变性:
String的内容一旦声明则不可改变(Immutable);而StringBuffer声明的内容可以直接改变(Mutable)。 - 线程安全:
StringBuffer的方法是同步锁定的,线程安全但效率略低;String本身不可变,天然线程安全;若需更高性能的单线程字符串操作,推荐使用StringBuilder。 - 内存占用:频繁拼接字符串时,
String会产生大量临时对象导致内存浪费,而StringBuffer直接在原有数组上操作,更加高效。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









