StringBuffer类和StringBuilder类也是java api重要的内容,本篇主要介绍这两类的方法及演示效果。
一.StringBuffer类
由于字符串是常量,因此一旦创建,其内容和长度是不可改变的。为了方便对字符串进行修改,java提供了一个StringBuffer类(也被称之为字符串缓冲区)。StringBuffer类和String类的最大区别在于它的长度和内容都是可以进行改变的。StringBuffer类似一个字符容器,当在其中进行添加或删除字符时,并不会产生新的对象。
为了方便读者理解,下面用具体的代码演示:
package Text4;
public class text {
public static void main(String[] args) {
System.out.println("1、添加-----------------");
add();
System.out.println("2、删除-----------------");
remove();
System.out.println("3、修改-----------------");
alter();
}
private static void add() {
StringBuffer sb=new StringBuffer();//创建一个字符串缓冲区
sb.append("textzhz");//在末尾添加字符串
System.out.println("append添加的结果:"+ sb);
sb.insert(2,"123");//在指定位置插入字符串
System.out.println("insert添加的结果:"+ sb);
}
private static void remove() {
StringBuffer sb=new StringBuffer("textzhz");
sb.delete(1,5);//指定范围删除
System.out.println("删除指定范围结果:"+ sb);
sb.deleteCharAt(2);//指定位置删除
System.out.println("删除指定范围结果:"+ sb);
sb.delete(0,sb.length());//清空缓冲区
System.out.println("清空缓冲区的结果:"+ sb);
}
private static void alter() {
StringBuffer sb=new StringBuffer("textzhz");
sb.setCharAt(1,'p');//修改指定位置字符
System.out.println("修改指定位置字符结果:"+ sb);
sb.replace(1,3,"qq");//替换指定位置字符串或字符
System.out.println("替换指定位置字符串或字符的结果:"+ sb);
System.out.println("字符串反转结果:"+ sb.reverse());
}
}
在代码块中,主要提及了添加、删除、修改这三大功能
在添加功能中主要运用到了append()和insert()方法,其中append()是在字符串的末尾添加其他字符,而insert()是在指定的位置添加字符串;
在删除功能中运用到了delete()和deleteCharAt()方法,delete()是删除指定的范围,deletecharAt()是删除指定的位置,计算好字符串的长度,delete()还能达到清空缓冲区的效果;
在修改功能中运用到了setCharAt()、replace()和revers()方法,setCharAt()是修改指定位置字符,replace()主要是替换指定位置的字符,而revers()是实现反转效果的。
二、StringBuilder类
StringBuilder类跟StringBuffer类大同小异,两类的方法用处都是相同的,而且他们的对象都是可以被多次修改的,并不会产生新的未使用对象,StringBuilder类是JDK5中新加的类,它与StringBuffer类之间最大的不同在于StringBuilder的方法是非线程安全,也就是是,StringBuffer不能被同步访问,而StringBuilder类却可以。
下面是两者之间的运行效率的对比
package Text4;
import static javax.management.Query.TIMES;
public class text1 {
public static void main(String[] args) {
text1.textString();
text1.textStringBuffer();
text1.textStringBuilder();
}
//String时间效率测试
private static void textString() {
long stareTime =System.currentTimeMillis();
String str="";
for (int i=0;i<TIMES;i++){
str +="text";
}
long endTime=System.currentTimeMillis();
System.out.println("String text usedTime: "+(endTime-stareTime));
}
//StringBuffer时间效率测试(线程安全)
private static void textStringBuffer() {
long stareTime =System.currentTimeMillis();
StringBuffer str=new StringBuffer();
for (int i=0;i<TIMES;i++){
str.append("text");
}
long endTime=System.currentTimeMillis();
System.out.println("StringBuffer text usedTime: "+(endTime-stareTime));
}
//StringBuilder时间效率测试(非线程安全)
private static void textStringBuilder() {
long stareTime =System.currentTimeMillis();
StringBuilder str=new StringBuilder();
for (int i=0;i<TIMES;i++){
str.append("text");
}
long endTime=System.currentTimeMillis();
System.out.println("StringBuilder text usedTime: "+(endTime-stareTime));
}
}
String类、StringBuffer类和StringBuilder类三者之间有很多的相似之处,开发者在使用时应当注意三者之间的区别