Java:StringBuffer StringBuilder 使用大全与运算速度比较
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
public class String_Buffer {
public static void main(String[] args) {
// 创建StringBuffer对象
StringBuffer sbf = new StringBuffer("门前大桥下,");
// 追加字符串常量
sbf.append("游过一群鸭,");
// 追加StringBuffer对象
StringBuffer tmp = new StringBuffer("快来快来数一数,");
sbf.append(tmp);
// 追加整型变量
int x = 24678;
sbf.append(x);
// 输出
System.out.println(sbf.toString());
sbf.setCharAt(3, 'A'); // 将索引为3的字符改成'A'
sbf = sbf.insert(5, "F"); //在索引为5的位置插入"F",将返回值赋给sbf自己
System.out.println("修改后的值是:" + sbf);
sbf = sbf.reverse();// 将字符序列sbf反转
System.out.println("反转之后的值为:" + sbf);
sbf = sbf.delete(3, 6); //删除从索引3开始至索引6之前的内容
System.out.println("删除之后的值为:"+sbf);
System.out.println("\n---********---\n");
int lenght = sbf.length();// 获取字符串序列的长度
char chr = sbf.charAt(7); // 获取索引为7的字符
int index = sbf.indexOf("A");// 获取字符串所在的索引位置
String substr = sbf.substring(0, 2);// 截取从索引0开始至索引2之间的字符串
StringBuffer tmpe = sbf.replace(2, 5, "6543");// 将从索引2开始至索引5之间的字符序列替换成"1234"
System.out.println("sbf的长度为:" + lenght);
System.out.println("索引为7的字符为:" + chr);
System.out.println("A字符串的索引位置为:" + index);
System.out.println("索引0开始至索引2之间的字符串:" + substr);
System.out.println("替换后的字符串为:" + tmpe);
}
}
public class String_Builder{
public static void main(String[] args) {
StringBuilder sbd = new StringBuilder();
System.out.println("sbd的原值为空");
sbd.append("我是StringBuilder类");
System.out.println("sbd追加字符串:" + sbd);
int length = sbd.length();
System.out.println("sbd的长度为:" + length);
sbd = sbd.insert(length - 1, "123456");
System.out.println("插入字符串:" + sbd);
sbd = sbd.delete(sbd.length() - 1, sbd.length());
System.out.println("删除最后一个字:" + sbd);
sbd = sbd.reverse();
System.out.println("反序输出:" + sbd);
}
}
public class String_Time{
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("String循环1万次消耗时间:" + time); // 将执行的时间输出
StringBuffer builder = new StringBuffer(""); // 创建字符串生成器
starTime = System.currentTimeMillis(); // 定义操作执行前的时间
for (int j = 0; j < 100000; j++) {
// 利用for循环进行操作
builder.append(j); // 循环追加字符
}
endTime = System.currentTimeMillis(); // 定义操作后的时间
time = endTime - starTime; // 追加操作执行的时间
System.out.println("StringBuffer循环10万次消耗时间:" + time); // 将操作时间输出
StringBuilder builder2 = new StringBuilder(""); // 创建字符串生成器
starTime = System.currentTimeMillis(); // 定义操作执行前的时间
for (int j = 0; j < 100000; j++) {
// 利用for循环进行操作
builder2.append(j); // 循环追加字符
}
endTime = System.currentTimeMillis(); // 定义操作后的时间
time = endTime - starTime; // 追加操作执行的时间
System.out.println("StringBuilder循环10万次消耗时间:" + time); // 将操作时间输出
}
}
结果:运算速度:String < StringBuffer < StringBuilder
还没有评论,来说两句吧...