创建成功的字符串对象,其长度一般来说是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符串或新字符的目的,但是“+”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如果重复得对字符串进行修改,将极大地增加系统开销。鉴于此,J2SE 5.0 新增了可变的字符序列 String-Builder 类,大大地提高了频繁增加字符串的效率。
public class test {
public static void main(String[] args) {
String str = ""; //创建空字符串
//定义对字符串执行操作的开始时间
long startTime = System.currentTimeMillis();
//for 循环追加字符串
for (int i = 0; i < 10000; i++) {
str = str + i;
}
//定义对字符串执行操作的结束时间
long endTime = System.currentTimeMillis();
//定义开始时间与结束时间的时间差
long timeDiff = endTime - startTime;
System.out.println("String消耗时间:" + timeDiff);
//String Builder
StringBuilder strBuilder = new StringBuilder("");
long startTimeStr = System.currentTimeMillis();
for (int j = 0; j < 10000; j++) {
strBuilder.append(j);
}
long endTimeStr = System.currentTimeMillis();
long timeDiffStr = endTimeStr - startTimeStr;
System.out.println("String Builder消耗时间:" + timeDiffStr);
}
}
以上代码可以看出这两种操作的执行时间相差很大,如果在程序中频繁地附加字符串,建议使用 StringBuilder。新创建的 StringBuilder 对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则 StringBuilder 对象将自动增加长度以容纳被附加的字符。若要使用 StringBuilder 最后输出字符串结果,可使用 toString() 方法。利用 StringBuilder 类中的方法可动态地执行添加、删除和插入等字符串地编辑操作。该类的常用方法如下:
(1)append() 方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如 int、boolean、char、String、double 或者另一个字符串生成器等。语法为:
append(content);
其中,content 表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。
(2)insert(int offset, arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的多个重载形式,可实现向字符串生成器中插入 int、float、char 和 boolean 等基本数据类型或其他对象。语法为:
insert(int offset, arg);
- offset:字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度。
- arg:将插入至字符串生成器的位置。该参数可以是任何的数据类型或其他对象。
(3)delete(int start, int end) 方法
该方法用于移除子字符串中的字符。该字符串从指定的 start 处开始,一直到索引 end - 1 处的字符,如果不存在这种字符,则一直到序列尾部。如果 start 等于 end,则不发生任何更改。语法为:
delete(int start, in end);
- start:将要删除的字符串的起点位置
- end:将要删除的字符串的终点位置
public class test {
public static void main(String[] args) {
// append()方法
StringBuilder strAppend = new StringBuilder("Hello");
System.out.println("Append:" + strAppend.append(" World !"));
// insert()方法
StringBuilder strInsert = new StringBuilder("Hello");
System.out.println("Insert:" + strInsert.insert(5, " World !"));
// delete()方法
StringBuilder strDelete = new StringBuilder("Hello World !");
System.out.println("Delete:" + strDelete.delete(5, 13));
}
}