掌握目标:
1,掌握StringBuffer与String的区别。
2,掌握StringBuffer常用方法。
3,掌握StringBuffer实际应用。
1,认识StringBuffer.
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明则不可改变,改变的只是地址指向。而StringBuffer是可以改变的。
对于StringBuffer而言,本身是一个具体的操作类,所以不能像String类那样直接赋值的方式进行对象实例化,必须通过构造方法完成。
字符串连接
String用“+”号完成字符串连接,而StringBuffer用“append()”方法。
实例操作:字符串连接(append(String s))
在StringBuffer中提供了一系列append()方法,下面观察其使用,(一定要注意,这些方法都会返回StringBuffer类的实例化对象)。
public class StringBufferDemo01{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("Hello ") ; // 向StringBuffer中添加内容 buf.append("World").append("!!!") ; // 可以连续调用append()方法 buf.append("\n") ; // 添加一个转义字符 buf.append("数字 = ").append(1).append("\n") ; // 添加数字 buf.append("字符 = ").append(‘C‘).append("\n"); // 添加字符 buf.append("布尔 = ").append(true) ; // 添加布尔值 System.out.println(buf) ; // 直接输出对象,调用toString() } };
结果:
Hello World!!! 数字 = 1 字符 = C 布尔 = true
继续验证StringBuffer内容是可以修改的,通过引用传递的方式完成。
package Thread1; public class demo1{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("Hello ") ; fun(buf) ; // 传递StringBuffer内容 System.out.println(buf) ; // 打印内容 } public static void fun(StringBuffer s){ // 接收StringBuffer引用 s.append("MLDN ").append("LiXingHua") ; // 修改StringBuffer的内容 } };
允许结果:
Hello MLDN LiXingHua
从以上代码证明StringBuffer是可以改变的。
实例操作二:在任意位置处为StringBuffer添加内容。
可以直接使用insert()方法添加内容: public StringBuffer insert(int OffSet,boolean b);
package Thread1; public class demo1{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("World!!") ; // 添加内容 buf.insert(0,"Hello ") ; // 在第一个内容之前添加内容 System.out.println(buf) ; buf.insert(buf.length(),"MLDN~") ; // 在最后添加内容 System.out.println(buf) ; } };
运行结果:
Hello World!! Hello World!!MLDN~
在StringBuffer中与Stirng类非处相似的是,都可以使用length()方法求出字符串长度。
实例操作三:字符串反转操作:public StringBuffer reverse()
直接使用reverse()方法可以完成反转功能,public StringBuffer reverse()。
public class StringBufferDemo04{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("World!!") ; // 添加内容 buf.insert(0,"Hello ") ; // 在第一个内容之前添加内容 String str = buf.reverse().toString() ; // 将内容反转后变为String类型 System.out.println(str) ; // 将内容输出 } };
运行结果:
!!dlroW olleH
对于上文红色部分,有两种方式:
一:讲内容反转后,转换成String类型,赋值给String类型的字符串。
String str = buf.reverse().toString() ;
二,讲内容反转后,赋值给StringBuffer类型的对象。
StringBuffer str = buf.reverse() ;
实例操作四:替换指定范围的内容
在StringBuffer中也存在replace()方法,也可以使用此方法对指定内容替换。
public StringBuffer replace(int start,int end,String str);
public class StringBufferDemo05{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容 buf.replace(6,11,"LiXingHua") ; // 将world的内容替换 System.out.println("内容替换之后的结果:" + buf) ; // 输出内容 } };
运行结果:
内容替换之后的结果:Hello LiXingHua!!
实例操作五:字符串截取
通过subString()直接从StringBuffer 中指定范围内截取内容。public String substring(int start,int end)
package Thread1; public class demo1{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容 buf.replace(6,11,"LiXingHua") ; // 将world的内容替换 String str = buf.substring(6,15) ; // 截取指定范围的内容 System.out.println("内容替换之后的结果:" + str) ; // 输出内容 } };
运行结果:
内容替换之后的结果:LiXingHua
实例操作六:删除指定范围内容:delet(int start,int end);
因为StringBuffer的内容是可以修改的,所以可以用delet()删除指定范围内容:public string delete(int start,int end)
package Thread1; public class demo1{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容 buf.replace(6,11,"LiXingHua") ; // 将world的内容替换 String str = buf.delete(6,15).toString() ; // 删除指定范围中的内容 System.out.println("删除之后的结果:" + str) ; // 输出内容 } };
运行结果:
删除之后的结果:Hello !!
实例操作七:查找指定的内容是否存在:indexof()
在String中,可以使用indexof()方法进行查找,在StringBuffer中可以继续使用这个方法。此方法如果找到了,返回位置,否则返回-1。
public class StringBufferDemo08{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象 buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容 if(buf.indexOf("World")==-1){ System.out.println("没有查找到指定的内容") ; }else{ // 不为-1表示查找到内容 System.out.println("可以查找到指定的内容,位置在第"+buf.indexOf("World")) ; } } };
运行结果:
可以查找到指定的内容,位置在第6
以上的方法对于String类也是存在的,使用的时候可以根据DOC文档查看即可。
StringBuffer的应用
观察以下代码,咱们之前已经在String中介绍过了。
public class StringBufferDemo09{ public static void main(String args[]){ String str1 = "LiXingHua" ; for(int i=0;i<100;i++){ str1 += i ; // 不断修改String的内存引用,性能低 } System.out.println(str1) ; } };
以上操作方法因为频繁修改字符串的内容,所以使用String是不合理的,最好的做法是使用StringBuffer。
public class StringBufferDemo10{ public static void main(String args[]){ StringBuffer buf = new StringBuffer() ; buf.append("LiXingHua") ; for(int i=0;i<100;i++){ buf.append(i); // StringBuffer可以修改,性能高 } System.out.println(buf) ; } };
对于StringBuffer而言,在频繁修改字符串的时候,性能更高。
总结
凡是要频繁修改字符串内容的时候,都要使用StringBuffer完成,而且StringBuffer也提供了一些String类没有的方法,比如delete(),insert()。