可变的字符序列StringBuilder类
相比String类:
在String类下创建成功的字符串对象,其内容是不能被改变和编译的。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。若重复地对字符串进行修改,将极大地增加系统开销。
StringBuilder类创建方法:(同String类)
StringBuilder builder = new StringBuilder("")
新创建的StringBuilder对象初始容量是16个字符,如果附加字符超过可容纳的长度,则StringBuilder对象将自动增加长度以容纳被附加的字符。
若要只用StringBuilder最后输出字符串结果,可使用toString()方法
StringBuilder bf = new StringBuilder("abc");
System.out.println(bf.toString());
1)append(content) 方法,向字符串生成器中追加内容,可接受任何类型数据,如int、boolean、char、String、double或者另一个字符串生成器。content为要追加的内容
2)insert(int offset, arg) 方法,向字符串生成器中的指定位置插入数据内容,可插入int、float、char和boolean等基本数据类型或其他对象。offset为插入位置索引,arg为插入内容
StringBuilder bf = new StringBuilder("hello");
bf.insert(2,"AB");
System.out.println(bf.toString()); //输出结果为"heABllo"
3)delete(int start, int end) 方法,移除从 start 开始到 (end-1)索引的字符。若start等于end,不做任何更改。
StringBuilder bf = new StringBuilder("hello");
bf.delete(2,4);
System.out.println(bf.toString()); //输出结果为"heo"
接下来,用一段代码来验证字符串操作和字符串生成器操作的效率:
public class stringB {
public static void main(String[] args) {
String str = ""; //创建空字符串
//定义对字符串执行操作的起始时间
long startTime = System.currentTimeMillis();
for(int i=0; i<100000;i++) {
str = str+i;
}
//定义对字符串操作后的时间
long endTime = System.currentTimeMillis();
long time = endTime - startTime;
System.out.println("String消耗的时间: "+time);
StringBuilder builder= new StringBuilder(""); //创建空字符串生成器
startTime = System.currentTimeMillis();
for(int i=0; i<100000;i++) {
builder.append(i);
}
endTime = System.currentTimeMillis();
time = endTime - startTime;
System.out.println("StringBuilder消耗的时间: "+time);
}
}
eclipse中运行代码结果: