StringBuffer使用


StringBuffer 類(lèi)和 StringBuilder 方法

前面學(xué)到過(guò) String 類(lèi)有一個(gè)重要的特點(diǎn),那就是 String 的值是不可變的,這就導(dǎo)致每次對(duì) String 的操作都會(huì)生成新的 String 對(duì)象,不僅效率低下,而且大量浪費(fèi)有限的內(nèi)存空間。那么對(duì)于經(jīng)常要改變值的字符串應(yīng)該怎樣操作呢?
答案就是使用 StringBuffer 和 StringBuilder 類(lèi),這兩個(gè)類(lèi)功能基本相似,區(qū)別主要在于 StringBuffer 類(lèi)的方法是多線程安全的(多線程的課程在后面會(huì)學(xué)習(xí)到),而StringBuilder 不是線程安全的,相比而言 StringBuilder 類(lèi)會(huì)略微快一點(diǎn)。

StringBuffer 類(lèi)

類(lèi) String
–字符串(String)對(duì)象一旦創(chuàng)建,其內(nèi)容不能再被修改 (read-only)
類(lèi) StringBuffer
–StringBuffer 對(duì)象的內(nèi)容是可以被修改的
–除了字符的長(zhǎng)度之外,還有容量的概念
–通過(guò)動(dòng)態(tài)改變?nèi)萘康拇笮?加速字符管理
1:StringBuffer 的構(gòu)造方法
buf1 = new StringBuffer();
–創(chuàng)建空的 StringBuffer 對(duì)象,初始容量為 16 字符
buf2 = new StringBuffer( 容量 );
–創(chuàng)建空的 StringBuffer 對(duì)象,指定容量大小。
buf3 = new StringBuffer( myString );
–創(chuàng)建含有相應(yīng)字符序列的 StringBuffer 對(duì)象,容量為 myString.length() +

–實(shí)例:
StringBuffer b = new StringBuffer("hello");
2:StringBuffer 的常用方法
?方法 length()
–返回 StringBuffer 的長(zhǎng)度
?方法 capacity()
–返回 StringBuffer 的容量
?方法 setLength(int newLength)
–增加或減小 StringBuffer 的長(zhǎng)度
?方法 charAt(int index)
–返回 StringBuffer 對(duì)象中指定位置的字符
?方法 setCharAt(int index, char ch)
–設(shè)置 StringBuffer 對(duì)象中指定位置的字符
?方法 getChars(int srcBegin, int srcEnd,
Char[] dst, int dstBegin)
–將 StringBuffer 對(duì)象中指定的字符子序列,拷貝到指定的字符數(shù)組(dst)
?方法 reverse()
–將 StringBuffer 對(duì)象中的字符序列按逆序方式排列,可用作字符串倒序
?11 種 append(…) 方法
–允許數(shù)值類(lèi)型的值添加到 StringBuffer 對(duì)象中
?10 種 insert 方法
–允許將各種數(shù)據(jù)插到 StringBuffer 對(duì)象的指定位置
?方法 delete(int start, int end) 和 deleteCharAt(int index)
–允許刪除 StringBuffer 對(duì)象中的指定字符
其中最常用的恐怕就要算 append 方法和 toString 方法了

源代碼

public class UsingStringBuffer {  
    
    public static void main(String[] args) {
        UsingStringBuffer us = new UsingStringBuffer();

          // us.testFindStr(); 
          // us.testSubStr();
          // us.testCharAtStr();
          // us.testAppend();
          // us.testDelete();
          // us.testInsert();
          // us.testReplace();
          us.reverseStr();
    }
    /** 
     * 查找匹配字符串 
     */  
    public static void testFindStr() {  
        StringBuffer sb = new StringBuffer();  
        sb.append("This is a StringBuffer");  
        // 返回子字符串在字符串中最先出現(xiàn)的位置,如果不存在,返回負(fù)數(shù)  
        System.out.println("sb.indexOf(\"is\")=" + sb.indexOf("is"));  
        // 給indexOf方法設(shè)置參數(shù),指定匹配的起始位置  
        System.out.println("sb.indexOf(\"is\")=" + sb.indexOf("is", 3));  
        // 返回子字符串在字符串中最后出現(xiàn)的位置,如果不存在,返回負(fù)數(shù)  
        System.out.println("sb.lastIndexOf(\"is\") = " + sb.lastIndexOf("is"));  
        // 給lastIndexOf方法設(shè)置參數(shù),指定匹配的結(jié)束位置  ,從指定位置開(kāi)始,從后往前
        System.out.println("sb.lastIndexOf(\"is\", 1) = "  
                + sb.lastIndexOf("is", 1));  
    }  
  
    /** 
     * 截取字符串 
     */  
    public static void testSubStr() {  
        StringBuffer sb = new StringBuffer();  
        sb.append("This is a StringBuffer");  
        // 默認(rèn)的終止位置為字符串的末尾  
        System.out.print("sb.substring(4)=" + sb.substring(4));  
        // substring方法截取字符串,可以指定截取的起始位置和終止位置  
        System.out.print("sb.substring(4,9)=" + sb.substring(4, 9));  
    }  
  
    /** 
     * 獲取字符串中某個(gè)位置的字符 
     */  
    public static void testCharAtStr() {  
        StringBuffer sb = new StringBuffer("This is a StringBuffer");  
        System.out.println(sb.charAt(sb.length() - 1));  
    }  
  
    /** 
     * 添加各種類(lèi)型的數(shù)據(jù)到字符串的尾部 
     */  
    public static void testAppend() {  
        StringBuffer sb = new StringBuffer("This is a StringBuffer!");  
        sb.append(1.23f);
        sb.append("hello");
        System.out.println(sb.toString());  
    }  
  
    /** 
     * 刪除字符串中的數(shù)據(jù) 
     */  
    public static void testDelete() {  
        StringBuffer sb = new StringBuffer("This is a StringBuffer!");  
        sb.delete(0, 5);  
        sb.deleteCharAt(sb.length() - 1);  
        System.out.println(sb.toString());  
    }  
  
    /** 
     * 向字符串中插入各種類(lèi)型的數(shù)據(jù) 
     */  
    public static void testInsert() {  
        StringBuffer sb = new StringBuffer("This is a StringBuffer!");  
        // 能夠在指定位置插入字符、字符數(shù)組、字符串以及各種數(shù)字和布爾值  
        sb.insert(2, 'W');  
        sb.insert(3, new char[] { 'A', 'B', 'C' });  
        sb.insert(8, "abc");  
         
        System.out.println("testInsert: " + sb.toString());  
    }  
  
    /** 
     * 替換字符串中的某些字符 
     */  
    public static void testReplace() {  
        StringBuffer sb = new StringBuffer("This is a StringBuffer!");  
        // 將字符串中某段字符替換成另一個(gè)字符串  
        sb.replace(10, sb.length(), "Integer");  
        System.out.println("testReplace: " + sb.toString());  
    }  
  
    /** 
     * 將字符串倒序 
     */  
    public static void reverseStr() {  
        StringBuffer sb = new StringBuffer("This is a StringBuffer!");  
        System.out.println(sb.reverse()); // reverse方法將字符串倒序  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,765評(píng)論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,518評(píng)論 0 3
  • 前言 真的懂String么?真的懂String里面的==與equals的差別么?我想說(shuō)原來(lái)可能我懂,但是后來(lái)就沒(méi)有...
    yzzCool閱讀 663評(píng)論 0 3
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,141評(píng)論 0 62
  • 活動(dòng)分析: 從各種圖形的變化組合等奇妙的現(xiàn)象,新幼兒并激發(fā)他們探索的愿望和興趣。從而感受創(chuàng)新思維的樂(lè)趣。發(fā)現(xiàn)生活中...
    默念_769a閱讀 3,224評(píng)論 0 1