StringBuffer的示例

1、StringBuffer与String的关系

   A、是两个不同的类,String实例一旦创建完毕,就不能再修改起内容。而StringBuffer实例则可修改实例所包含的字符序   列。

   B、两者间的转换:

      *从一个StringBuffer实例可以通过类String的构造方法构造出一个具有相同字符序列的String实例。

       格式如下:new  String(StringBuffer实例的引用);

       另外还可以通过StringBuffer的成员方法来完成相同的转化。

    例如:public String toString();

              设b为StringBuffer类型的变量,则:String s=String(b);与String s=b.toString();具有相同效果,均会生成与b所指向的StrngBuffer实例内容相同的String实例,并将其指向String变量s。

      *反过来,从String实例也可以构造出相应的具有相同字符序列的StringBuffer实例。其方法是通过StringBuffer的构造方法:

       public StringBuffer(String str)

    例如:StringBuffer b=new StringBuffer("abcd");

2、修改StringBuffer实例内容

   A、通过StringBuffer的成员方法 public int length() 获得StringBuffer实例的字符串长度。

   B、通过StringBuffer的成员方法:public char charAt(int index)得到字符序列中指定下标的字符。

   C、通过StringBuffer的成员方法:public void setCharAt(int index,char ch)可以将StringBuffer实例的字符序列中指定下标的字符设置为指定的字符。

    例如:StringBuffer b=new StringBuffer("that");

              b.setCharAt(0,'c');//将b所指向的StringBuffer势力的字符序列从that变为char

   D、几种常用的修改StringBuffer实例的成员方法

      *append:在字符串序列之后添加新的内容

    例如:StringBuffer b=new StringBuffer(“Pretty”);

              b.append("good!");//b的字符序列变为Pretty good!

      *delete:删除字符串序列中指定的子序列

    例如:StringBuffer b=new StringBuffer(“Those”)

              b.delete(2,4);//删除字符序列Those中的下标为2和3(4-1)的字符

      *insert:在指定的位置给字符序列插入新的内容

        例如:StringBuffer b=new StringBuffer(“1+=2”);

          b.insert(2,1);//在“1+=2”的下标为2的字符之前插入整数1

      *replace:替换指定的下标字符,声明方法为:public StringBuffer replace(int start,int end,String str)

    例如:StringBuffer b=new StringBuffer(“25*??=625”);

              b.replace(3,5,"25");//将指定的子串(从下标为start到下标为(end-1)的子串)替换成心子串

      *reverse:将StringBuffer实例的字符序列变成其倒序的字符序列,声明方法为:public StringBuffer reverse()

    例如:StringBuffer b=new StringBuffer(“Pretty”);

          b.reverse();//将b所指向的StringBuffer实例的内容从Pretty变为ytterP

3、StringBuffer实例的容量:StringBuffer实例所占用的内存大小称为StringBuffer实例的容量。可以通过StringBuffer的成员方法public int capacity()获得其实例的容量。

   A、StringBuffer具有三种构造方法,这三种构造方法生成的StringBuffer实例的容量大小如下表:

构造方法

字符序列长度

内存容量

public StringBuffer()

0

16

Public StringBuffer(int length)

0

Length

public StringBuffer(String str)

Str中的字符长度

Str中的字符序列长度加16

   B、在当前的StringBuffer实例容量容纳不下变化后的字符序列时,StringBuffer实例会重新申请内存,提高内存容量。当调用了类StringBuffer的成员方法

public void ensureCapacity(int minimumCapacity)并且其中的参数minimymCapacity比当前的StringBuffer实例容量大的情况下,StringBuffer 实例也会重新申请内存,提高内存容量。新的内存容量是下面的两个参数中较大的数:①minimumCapacity;②(当前StringBuffer实例容量)*2+2。



在开发程序的时候,经常使用StringBuffer来进行字符串的拼接。如果在循环中来反复的做字符串拼接时,会清空Stringbuffer中的内容,然后再拼接新的字符串信息。

例如:

StringBuffer sb = new StringBuffer("");

for (UserInfo ui : userInfoList) {

    sb = new StringBuffer("");

    sb.append("姓名:");

    sb.append(ui.getName());

    sb.append("  ");

    sb.append("年龄:");

    sb.append(ui.getAge());

    System.out.println(sb.toString());

}

在循环中使用sb = new StringBuffer("");来清空sb中的信息。

 

StringBuffer提供了以下连个方法:

1、delete(int start, int end)
          移除此序列的子字符串中的字符

2、setLength(int newLength)
          设置字符序列的长度。

 

测试程序:

   private static void testStringBufferclear() {
        StringBuffer sbf = new  StringBuffer("wwwwww");
        StringBuffer sbi = new  StringBuffer("wwwwww");
        long s1 = System.currentTimeMillis();
        for (int i = 0; i < 500000; i++) {

        sbi.setLength(0);     sbi.setLength(0);
        }
        long s11 = System.currentTimeMillis();
        System.out.println("StringBuffer-setLength:" + (s11 - s1));
  
        s1 = System.currentTimeMillis();
        for (int i = 0; i < 500000; i++) {
         sbf.delete(0, sbf.length());
        }
        s11 = System.currentTimeMillis();
        System.out.println("StringBuffer--delete:" + (s11 - s1));
        s1 = System.currentTimeMillis();
        for (int i = 0; i < 500000; i++) {
         sbf = new StringBuffer("");
        }
        s11 = System.currentTimeMillis();
        System.out.println("StringBuffer--new StringBuffer:" + (s11 - s1));
       }
结果:

StringBuffer-setLength:63
StringBuffer--delete:109
StringBuffer--new StringBuffer:78

 

结论:

    要通过使用sbi.setLength(0);来清空StringBuffer对象中的内容效率最高。

猜你喜欢

转载自blog.csdn.net/w9y9p9999/article/details/47611511