文章目录
StringBuffer 和 StringBuilder 类概述
- StringBuffer:可变长字符串,由jdk1.0提供,运行效率慢,线程安全。
- StringBuilder:可变长字符串,由jdk5.0提供,运行效率快,线程不安全。
和String类相比的优势
运行效率更快,可节省内存。
1. append()方法
概述
将指定的字符串追加到此字符序列。
语法
public StringBuffer append(String s)
举例
package com.ibelifly.commonclass.stringbuffer;
public class Test1 {
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
System.out.println(s.append("Java"));
System.out.println(s.append("世界第一"));
}
}
2. insert(int offset, String str)方法
概述
从指定下标处,将String类型的字符串插入此序列中。
语法
public insert(int offset, String str)
offset:指定下标。
举例
package com.ibelifly.commonclass.stringbuffer;
public class Test1 {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("Java世界第一");
System.out.println(s.insert(0,"我认为"));
}
}
3. replace(int start, int end, String str) 方法
概述
使用给定 String
中的字符替换此序列的指定子字符串中的字符。
语法
replace(int start, int end, String str)
start:指定开始下标。
end:指定结束下标。
注意:遵循含头不含尾的原则。
举例
package com.ibelifly.commonclass.stringbuffer;
public class Test1 {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("我认为Java世界第一");
System.out.println(s.replace(0,1,"大部分人")); //含头不含尾,截止下标1之前
}
}
4. public delete(int start, int end)方法
概述
移除指定序列的子字符串中的字符。
语法
public delete(int start, int end)
start:指定开始下标。
end:指定结束下标。
注意:遵循含头不含尾的原则。
举例
package com.ibelifly.commonclass.stringbuffer;
public class Test1 {
public static void main(String[] args) {
StringBuffer s=new StringBuffer("我认为Java世界第一");
System.out.println(s.delete(0,3));
}
}
小结
以上方法均以StringBuffer
类为例,StringBuilder
类中也有同样方法,这里不一一赘述。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
String和StringBuilder的效率比较
我们用一段代码来验证StringBuilder比String的效率高的结论:
package com.ibelifly.commonclass.stringbuffer;
public class Test2 {
public static void main(String[] args) {
long start1=System.currentTimeMillis(); //开始时间
String string="";
for (int i = 0; i < 99999; i++) {
string+=i;
}
long end1=System.currentTimeMillis(); //结束时间
System.out.println("String类操作用时:"+(end1-start1));
long start2=System.currentTimeMillis(); //开始时间
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 99999; i++) {
stringBuilder.append(i);
}
long end2=System.currentTimeMillis(); //结束时间
System.out.println("StringBuilder类操作用时:"+(end2-start2));
}
}
参考视频:https://www.bilibili.com/video/BV1vt4y197nY?p=26
参考文章:https://www.runoob.com/java/java-stringbuffer.html