您的位置:首页 > Web前端

StringBuffer的示例

2015-08-13 14:04 309 查看
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对象中的内容效率最高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: