6.2 StringBuffer类
String类处理的是不可变字符串,对其内容操作时,就会生成新的String对象。如果字符串进行大量的操作,其效率是非常低的。为了解决这一问题,可以使用StringBuffer或StringBuilder类来操作字符串,本节首先讨论StringBuffer类的使用。
6.2.1 基本操作
当创建StringBuffer对象时,可以使用几种构造函数,如指定初始内容、指定初始大小等。
下面的代码创建一个StringBuffer对象,并显示其字符数量。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); System.out.println(sb.length()); // 7 }
如果创建StringBuffer对象时并不确定其内容,可以指定其初始大小。当内容不超过这个大小时,就不需要重新分配内容,所以合理地设置初始大小对于StringBuffer对象的处理效率是有帮助的,如下面的代码所示。
StringBuffer sb = new StringBuffer(200);
6.2.2 添加内容
StringBuffer类中定义了一个系列append()方法的重载版本,用于将不同类型的数据追加到StringBuffer对象末尾,如下面的代码所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abc"); sb.append("defg"); sb.append(123); sb.append(true); System.out.println(sb); }
代码执行结果如图6-6所示。
如果需要将内容插入指定的位置,可以使用insert()方法,如下面的代码所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.insert(3,"***"); System.out.println(sb); }
代码执行结果如图6-7所示。
图6-6 向StringBuffer对象末尾追加内容
图6-7 在StringBuffer对象中插入内容
实际上,insert()方法也包括一系列的重载版本,可以将不同类型的数据插入指定的位置。其参数也很简单,第一个参数指定插入位置的索引值,第二个参数指定需要插入的内容。
6.2.3 删除内容
当删除指定位置的字符时,使用deleteCharAt()方法,其参数指定待删除字符的索引值。
此外,使用delete()方法,还可以删除指定范围的内容,如下面的代码所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.delete(3,6); System.out.println(sb); // abcg }
delete()方法中,第一个参数指定开始删除的索引位置,第二个参数的设置同样可以参考如下规则,当执行delete(i, n)操作时,会删除从i开始的n-i个字符。
6.2.4 查询
定义一个StringBuffer对象后,可以通过以下一些方法获取其内容。
□ charAt()方法,获取指定索引位置的字符。
□ substring()方法,获取指定范围的字符串。
□ indexOf()方法,找到参数指定的内容,并返回第一次出现的索引位置,没有找到则返回-1。
□ lastIndexOf()方法,找到参数指定的内容,并返回最后一次出现的索引位置,没有找到则返回-1。
这些个方法与String类的同名方法有相同的参数,可以参考使用。
6.2.5 替换
当替换StringBuffder对象的内容时,可以使用replace()方法,它包括三个参数。
□ 第一个参数,指定开始替换的索引值。
□ 第二个参数,指定替换结束位置的后一个索引位置。
□ 第三个参数,指定替换内容。
下面的代码演示了replace()方法的使用。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.replace(3,6,"***"); System.out.println(sb); }
代码执行结果如图6-8所示。
在使用replace()方法时,可以参考以下规则,即s1.replace(i, n, s2)语句会将s1字符串中从i开始的n-i个字符替换为s2的内容。
图6-8 替换StringBuffer对象的内容
6.2.6 反向排列
使用reserve()方法,可以将StringBuffer对象中的内容反向排列,如下面的代码所示。
public static void main(String[] args) { StringBuffer sb = new StringBuffer("abcdefg"); sb.reverse(); System.out.println(sb); }
代码执行结果如图6-9所示。
图6-9 反向排列StringBuffer对象的内容