字符串生成器

对于创建成功的字符串对象,它的长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复的对字符串进行修改,将极大地增加系统开销。而J2SE5.0新增了可变的字符序列StringBuilder类,大大提高频繁增加字符串的效率。通过下面简单的测试就可以知道差距。

  在项目中创建类Jerque,在主方法中代码编写如下代码,验证字符串操作和字符串生成器操作的效率。

public class Jerque {                                                                    //新建类

                  public static void main(String[] args) {                        //主方法

                        String str = "";                                                     //创建空字符串

                        long starTime = System.currentTimeMillis();          //定义对字符串执行操作的起始时间

                        for(int i = 0;i<10000;i++){                                   //利用for循环执行10000次操作

                              str = str+i;                                                     //循环追加字符串

                        }

                        long endTime = System.currentTimeMillis();          //定义对字符串操作后的时间

                        long time = endTime - starTime;                            //计算对字符串执行操作的时间

                        System.out.println("Sting消耗时间:"+time);         //将执行的时间输出

                        StringBuilder builder = new StringBuilder("");          //创建字符串生成器

                        starTime= System.currentTimeMillis();                  //定义操作执行前的时间

                        for(int j = 0;j<10000;j++){                                   //利用for循环进行操作

                              builder.append(j);                                           //循环追加字符

                        }

                        endTime = System.currentTimeMillis();                  //定义操作后的时间

                        time = endTime - starTime;                                   //追加操作执行的时间

                        System.out.println("StringBuilder消耗时间:"+time);     //将操作时间输出

                        }

}

执行的结果如图1所示

 

          1  运行结果

通过这一实例可以看出执行的时间差距很大。如果在程序中频繁的进行附加字符串,建议使用StringBuilder。新创建的StringBuilder对象初始容量是16个字符。可以自行指定初始长度。如果附加的字符超过可容纳的长度,则StringBuilder对象将自动增加长度以容纳被附加的字符。若要使用StringBuilder最后输出字符串结果。可使用toString()方法。应用StringBuilder类中的方法可动态的执行添加、删除、插入等字符串的编辑操作。该类的常用方法有:

1append()方法

该方法用于向字符串生成器中追加内容,通过该方法的多个重载形式,可实现接受任何类型的数据。如intbooleancharStringdouble或者另一个字符串生成器等。

语法如下:

append(content)

content:表示要追加到字符串生成器中的内容。可以是任何类型的数据或者其他对象。

2intsert(int offset , arg)方法

该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入intfloatcharboolean等基本数据类型或其他对象。

语法如下:

insert(int offset , arg)

l         offset:字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度。

l         arg:将插入至字符串生成器的位置。该参数可以是任何的数据类型或其他对象。

  向字符生成器中指定的位置添加字符。实例代码如下:

StringBuilder bf = new StringBuilder("hello");      //创建字符生成器

bf.insert(5, "word");                                         //添加至字符生成器的内容

System.out.println(bf.toString());                       //此时输出信息为helloword

3delete(int start , int end)方法

移除此序列的子字符串中的字符。该子字符串从指定的start处开始,一直到索引end - 1处的字符,如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。

语法如下:

delete(int start , int end)

l         start:将要删除的字符串的起点位置。

l         end:将删除字符串的终点位置。

  删除指定位置的子字符串,实例代码如下:

StringBuilder bf = new StringBuilder("StringBuilder"); //创建字符串生成器

bf.delete(5, 10);                                                      //删除的子字符串

System.out.println(bf.toString());                              //此时输出的信息为Strinder

 说明想要了解更多的StringBuilder类方法可查询java.lang.StringBuilderAPI说明