Java与Android移动应用开发:技术、方法与实践
上QQ阅读APP看书,第一时间看更新

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对象的内容