zoukankan      html  css  js  c++  java
  • 常用类库——StringBuffer类

    掌握目标:

      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("
    ") ;                        // 添加一个转义字符
            buf.append("数字 = ").append(1).append("
    ") ;    // 添加数字
            buf.append("字符 = ").append('C').append("
    ");     // 添加字符
            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()。

  • 相关阅读:
    【前缀和】【分类讨论】hdu5163 Taking Bus
    【DFS】bzoj2079 [Poi2010]Guilds
    【贪心】bzoj3850 ZCC Loves Codefires
    【分类讨论】bzoj3856 Monster
    【莫队算法】【权值分块】bzoj2223 [Coci 2009]PATULJCI
    【枚举】bzoj1709 [Usaco2007 Oct]Super Paintball超级弹珠
    【矩阵哈希】【二分答案】【哈希表】bzoj1567 [JSOI2008]Blue Mary的战役地图
    【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix
    【哈希表】CODEVS1230 元素查找
    【二分答案】【哈希表】【字符串哈希】bzoj2946 [Poi2000]公共串
  • 原文地址:https://www.cnblogs.com/alsf/p/5744636.html
Copyright © 2011-2022 走看看