<small id="7ktuj"></small>
      <bdo id="7ktuj"></bdo>
        <mark id="7ktuj"></mark>

        <source id="7ktuj"></source>
        <small id="7ktuj"></small>

        ITPub博客

        首頁 > 應用開發 > Java > StringBuffer的基本使用

        StringBuffer的基本使用

        原創 Java 作者:蝴蝶飛啊飛 時間:2019-10-29 13:34:16 0 刪除 編輯

        1 StringBuffer 對象的初始化

        StringBuffer 對象的初始化不像 String 類的初始化一樣, Java 提供的有特殊的語法,而通常情況下一般使用構造方法進行初始化。

        例如:

        StringBuffer s = new StringBuffer();

        這樣初始化出的StringBuffer 對象是一個空的對象,就是我犯的錯誤。

        如果需要創建帶有內容的StringBuffer 對象,則可以使用:

        StringBuffer s = new StringBuffer( abc );

        這樣初始化出的StringBuffer 對象的內容就是字符串” abc ”。

        需要注意的是,StringBuffer String 屬于不同的類型,也不能直接進行強制類型轉換,下面的代碼都是錯誤的:

        StringBuffer s = abc ; // 賦值類型不匹配

        StringBuffer s = (StringBuffer) abc ; // 不存在繼承關系,無法進行強轉

        StringBuffer 對象和 String 對象之間的互轉的代碼如下:

        String s = abc ;

        StringBuffer sb1 = new StringBuffer( 123 );

        StringBuffer sb2 = new StringBuffer(s); //String 轉換為 StringBuffer

        String s1 = sb1.toString(); //StringBuffer 轉換為 String

        2 StringBuffer 的常用方法

        StringBuffer 類中的方法主要偏重于對于字符串的變化,例如追加、插入和刪除等,這個也是 StringBuffer String 類的主要區別。

        a append 方法

        public StringBuffer append(boolean b)

        該方法的作用是追加內容到當前StringBuffer 對象的末尾,類似于字符串的連接。調用該方法以后, StringBuffer 對象的內容也發生改變,例如:

        StringBuffer sb = new StringBuffer( abc );

        sb.append(true);

        則對象sb 的值將變成” abctrue ”。

        使用該方法進行字符串的連接,將比String 更加節約內容,例如應用于數據庫 SQL 語句的連接,用 StringBuffer 對象來做 sql 語句拼接的話會節省很多的內存,例如:

        StringBuffer sb = new StringBuffer();

        String user = test ;

        String pwd = 123 ;

        sb.append( select * from userInfo where username= )

        .append(user)

        .append( and pwd= )

        .append(pwd);

        這樣對象sb 的值就是字符串“ select * from userInfo where username=test and pwd=123 ”。

        b deleteCharAt 方法

        public StringBuffer deleteCharAt(int index)

        該方法的作用是刪除指定位置的字符,然后將剩余的內容形成新的字符串。例如:

        StringBuffer sb = new StringBuffer( Test );

        sb. deleteCharAt(1);

        該代碼的作用刪除字符串對象sb 中索引值為 1 的字符,也就是刪除第二個字符,剩余的內容組成一個新的字符串。所以對象 sb 的值變為” Tst ”。

        還存在一個功能類似的delete 方法:

        public StringBuffer delete(int start,int end)

        該方法的作用是刪除指定區間以內的所有字符,包含start ,不包含 end 索引值的區間。例如:

        StringBuffer sb = new StringBuffer( TestString );

        sb. delete (1,4);

        該代碼的作用是刪除索引值1( 包括 ) 到索引值 4( 不包括 ) 之間的所有字符,剩余的字符形成新的字符串。則對象 sb 的值是” TString ”。

        c insert 方法

        public StringBuffer insert(int offset, boolean b)

        該方法的作用是在StringBuffer 對象中插入內容,然后形成新的字符串。例如:

        StringBuffer sb = new StringBuffer( TestString );

        sb.insert(4,false);

        該示例代碼的作用是在對象sb 的索引值 4 的位置插入 false 值,形成新的字符串,則執行以后對象 sb 的值是” TestfalseString ”。

        d reverse 方法

        public StringBuffer reverse()

        該方法的作用是將StringBuffer 對象中的內容反轉,然后形成新的字符串。例如:

        StringBuffer sb = new StringBuffer( abc );

        sb.reverse();

        經過反轉以后,對象sb 中的內容將變為” cba ”。

        e setCharAt 方法

        public void setCharAt(int index, char ch)

        該方法的作用是修改對象中索引值為index 位置的字符為新的字符 ch 。例如:

        StringBuffer sb = new StringBuffer( abc );

        sb.setCharAt(1, D );

        則對象sb 的值將變成” aDc ”。

        f trimToSize 方法

        public void trimToSize()

        該方法的作用是將StringBuffer 對象的中存儲空間縮小到和字符串長度一樣的長度,減少空間的浪費。

        總之,在實際使用時,String StringBuffer 各有優勢和不足,可以根據具體的使用環境,選擇對應的類型進行使用。

        StringBuffer 的基本使用示例:

        package com.igeek02;

        /*

         * StringBuffer: 底層維護了一個字符數組

         * 線程安全的可變字符序列。一個類似于 String 的字符串緩沖區

         * 可以通過某些方法調用可以改變該序列的長度和內容。

         * StringBuffer 上的主要操作是 append insert 方法,可重載這些方法,以接受任意類型的數據。

         *

         *

         * String :不可變的字符串緩沖區,字符串是常量,一旦定義不能更改

         * StringBuffer 可變的字符串緩沖區   JDK1.0    線程安全的 (java 使用使用同步機制保證線程安全 ) ,效率低

         * StringBuilder   可變的字符串緩沖區 JDK1.5   線程不安全的,效率高

         *

         * 構造方法:

         * StringBuffer()

                   構造一個其中不帶字符的字符串緩沖區,其初始容量為 16 個字符。

           StringBuffer(String str)

                   構造一個字符串緩沖區,并將其內容初始化為指定的字符串內容。

           StringBuffer 基本上所有的方法都是操作對象本身

            方法

           StringBuffer append(int i)

                   int 參數的字符串表示形式追加到此序列。

           StringBuffer append(char[] str, int offset, int len)

                   char 數組參數的子數組的字符串表示形式追加到此序列。

           StringBuffer append(Object obj)

                   追加 Object 參數的字符串表示形式。

           StringBuffer append(String str)

                   將指定的字符串追加到此字符序列。

           StringBuffer append(StringBuffer sb)

                   將指定的 StringBuffer 追加到此序列中。

            StringBuffer insert(int offset, boolean b)

                   boolean 參數的字符串表示形式插入此序列中。

            StringBuffer  insert(int offset, Object obj)

                   Object 參數的字符串表示形式插入此字符序列中。

            StringBuffer insert(int offset, String str)

                   將字符串插入此字符序列中。   

             獲取

            int  capacity()   返回當前容量。

          char  charAt(int index) 返回此序列中指定索引處的 char 值。

          int length() 返回長度(字符數)。

            int indexOf(String str)

                   返回第一次出現的指定子字符串在該字符串中的索引。

          int indexOf(String str, int fromIndex)

                   從指定的索引處開始,返回第一次出現的指定子字符串在該字符串中的索引。

          int lastIndexOf(String str)

                   返回最右邊出現的指定子字符串在此字符串中的索引。

          int lastIndexOf(String str, int fromIndex)

                   返回最后一次出現的指定子字符串在此字符串中的索引。

          刪除

          StringBuffer  delete(int start, int end)

                   移除此序列的子字符串中的字符。

          StringBuffer   deleteCharAt(int index)

                   移除此序列指定位置的 char

             void setCharAt(int index, char ch)

                   將給定索引處的字符設置為 ch

          void  setLength(int newLength)

                   設置字符序列的長度。

          void trimToSize()

                   嘗試減少用于字符序列的存儲空間。

           void ensureCapacity(int minimumCapacity)

                   確保容量至少等于指定的最小值。     

           StringBuffer 容量擴展

            添加元素之后,容量不夠,需要擴容,(在原有容量(capacity )的基礎上乘以 2 ,再加上 2

            原有容量擴展一倍

            如果擴展一被之后還不夠存儲,那么容量直接擴展到等于當前所需的最小容量

         * */

        public class Demo1 {

        public static void main(String[] args) {

        /*

         * 刪除

           StringBuffer  delete(int start, int end)

                   移除此序列的子字符串中的字符。

           StringBuffer   deleteCharAt(int index)

                   移除此序列指定位置的 char

                  

             void setCharAt(int index, char ch)

                   將給定索引處的字符設置為 ch

           void  setLength(int newLength)

                   設置字符序列的長度。

         * */

        StringBuffer sb = new StringBuffer("igeekhome");

        //sb.delete(1, 3);//[1,3)

        sb.delete(0, 5);

        System.out.println(sb);//home

        sb.deleteCharAt(1);

        System.out.println(sb);

        sb.setCharAt(0, 'k');

        System.out.println(sb);

        /*

         * 其他  

           void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

                   將字符從此序列復制到目標字符數組 dst

           StringBuffer replace(int start, int end, String str)

                   使用給定 String 中的字符替換此序列的子字符串中的字符。

           StringBuffer reverse()

                   將此字符序列用其反轉形式取代。

         String substring(int start)

                   返回一個新的 String ,它包含此字符序列當前所包含的字符子序列。

         String substring(int start, int end)

                   返回一個新的 String ,它包含此序列當前所包含的字符子序列。

         String toString()

                   返回此序列中數據的字符串表示形式。

         * */

        sb = new StringBuffer("igeekhome");

        sb.replace(0, 5, "China");

        System.out.println(sb);//Chinahome

        sb.reverse();

        System.out.println(sb);

        sb = new StringBuffer("igeekhome");

        String s  = sb.substring(2);

        System.out.println(s);

        System.out.println(sb);//igeekhome   substring 截取子串,并返回新的字符串

        s = sb.substring(0, 5);//[0,5)

        System.out.println(s);

        String s1 = sb.toString();//StringBuffer --> String

        System.out.println(s1);

        }

        public static void m2() {

        StringBuffer s = new StringBuffer();

        System.out.println(" 容量: " + s.capacity());//16 :

        System.out.println(" 長度: " + s.length());//0

        s.append("igeek");

        System.out.println(" 容量: " + s.capacity());//16 : 包含 5 個字符

        System.out.println(" 長度: " + s.length());//5

        s.append("igeekigeek");//15 個字符 , 容量 16

        s.append("igeekigeekigeekigeek");

        //s.append("igeekigeekigeek");

        System.out.println(" 容量: " + s.capacity());//

        System.out.println(" 長度: " + s.length());//20

        }

        public static void m1() {

        StringBuffer s = new StringBuffer();// 空字符串

        System.out.println(s);

        s.append(12);

        System.out.println(s);

        s.append(new char[] {'h','a','h','a'}, 0, 2);

        System.out.println(s);

        s.append(new Demo1());// 對象 toString 方法的返回值拼接到 StringBuffer 對象上

        System.out.println(s);

        s.append("igeek");

        s.append(new StringBuffer(" 哈哈 "));

        System.out.println(s);

        System.out.println(s.append(true).append(3.14));

        /*System.out.println("---");

        String s1 = "haha";

        s1.concat("hehe");

        System.out.println(s1);*/

        s = new StringBuffer("igeek");

        s.insert(1, " 哈哈 ");

        System.out.println(s);

        s.insert(0, new Demo1());

        System.out.println(s);

        }

        @Override

        public String toString() {

        // TODO Auto-generated method stub

        return "0";

        }

        }

        StringBuffer 的添加功能

        public StringBuffer append(String str):

        * 可以把任意類型數據添加到字符串緩沖區里面 , 并返回字符串緩沖區本身

        public StringBuffer insert(int offset,String str):

        * 在指定位置把任意類型的數據插入到字符串緩沖區里面 , 并返回字符串緩沖區本身

        舉例說明:

        StringBuffer sb = new StringBuffer();

        StringBuffer sb1 = sb.append("I");

        StringBuffer sb2 = sb.append("love");

        StringBuffer sb3 = sb.append("you");

        System.out.println(sb1);

        System.out.println(sb2);

        System.out.println(sb3);

        結果都是輸出"Iloveyou" ,說明 sb1 sb2 sb3 這三個引用都是指向同一個對象,也就說明了這個 append 方法是返回字符串緩沖區本身的,同理 insert 也是。

        這里我們可以直接使用三次sb.append() ;打印 sb 結果也是一樣的。

        StringBuffer 的刪除功能

        public StringBuffer deleteCharAt(int index):

        * 刪除指定位置的字符,并返回字符串緩沖區本身

        public StringBuffer delete(int start,int end):

        * 刪除從指定位置開始指定位置結束的內容,并返回字符串緩沖區本身

        舉例說明:

        StringBuffer sb = new StringBuffer();

        sb.append("Iloveyou");

        sb.deleteCharAt(1);

        System.out.println(sb);

        sb.delete(3,7);

        System.out.println(sb);

        輸出結果分別為Ioveyou Iov 。首先執行 sb.deleteCharAt(1) ,刪除了 love "l" ,然后變成了 "Ioveyou" ;再執行 sb.delete(3,7) ,把 v 后面的全部刪了,所以最終結果為 Iov 。這里我們看到我們是直接使用外匯返傭http://www.fx61.com/ sb. 方法,這是因為每次返回都是本身,所以我們不返回也行,有一個引用就行。

        StringBuffer 的替換和反轉功能

        A:StringBuffer 的替換功能

        public StringBuffer replace(int start,int end,String str):

        * start 開始到 end str 替換 也是返回字符串緩沖區本身

        B:StringBuffer 的反轉功能

        public StringBuffer reverse():

        * 字符串反轉 也是返回字符串緩沖區本身

        StringBuffer sb = new StringBuffer();

        sb.append("Iloveyou");

        sb.replace(1, 5, "miss");

        System.out.println(sb);

        sb.reverse();

        System.out.println(sb);

        輸出結果分別為Imissyou uoyssimI ,這里就不解釋了,同樣每次都是返回字符串緩沖區本身。

        StringBuffer 的截取功能

        public String substring(int start):

        * 從指定位置截取到末尾

        public String substring(int start,int end):

        * 截取從指定位置開始到結束位置,包括開始位置,不包括結束位置

        注意事項

        * 注意 : 返回值類型不再是 StringBuffer 本身,而是 String ,該過程創建了 String 對象

        舉例說明,以substring(int start) 為例:

        StringBuffer sb = new StringBuffer("Iloveyou");

        String s = sb.substring(1);

        System.out.println(s);

        輸出結果為loveyou ,這里返回值類型是 String 類,所以必須要創建一個字符串對象。

        注:String 類如果進行如此操作的話(比如拼接,截取字符串,大小寫轉化, trim 方法),每次都要創建新的 String 對象

        來自 “ ITPUB博客 ” ,鏈接:http://www.ep4tq.com/69946279/viewspace-2661774/,如需轉載,請注明出處,否則將追究法律責任。

        請登錄后發表評論 登錄
        全部評論
        管他誰是誰非,做自己的主宰,我是這條街最亮的崽!

        注冊時間:2019-08-22

        • 博文量
          49
        • 訪問量
          21835
        妹子图每日分享