字符串處理(二)


二、字符串緩存類StringBuffer

StringBuffer構造函數表

StringBuffer()
          構造一個其中不帶字符的字符串緩沖區,其初始容量為 16 個字符。
StringBuffer(CharSequence seq)
          public java.lang.StringBuilder(CharSequence seq) 構造一個字符串緩沖區,它包含與指定的 CharSequence 相同的字符。
StringBuffer(int capacity)
          構造一個不帶字符,但具有指定初始容量的字符串緩沖區。
StringBuffer(String str)
          構造一個字符串緩沖區,並將其內容初始化為指定的字符串內容。

常用構造函數的使用:(可以看出StringBuffer的長度是可變的)

 1 public class javaTest2 implements javaTest1 {
 2 
 3 public static void main(String[] args) {
 4 
 5     StringBuffer strb=new StringBuffer("aaa");
 6     System.out.println(strb);
 7     StringBuffer strb1=new StringBuffer(15);
 8     StringBuffer strb2=new StringBuffer();
 9     System.out.println("strb'length:"+strb.length()+"   strb1'length:"
10                           +strb1.length()+"   strb2'length:"+strb2.length());
11     strb2.append("aa");
12     System.out.println("strb2's length:"+strb2.length());
13     
14   }
15 }

運行結果:

 1 aaa

2 strb'length:3 strb1'length:0 strb2'length:0

3 strb2's length:2 

 

 

字符串緩存可以被多個線程安全的使用。它的方法使用synchronized修飾。這些方法可以在需要的時候可以同步執行,因而任一特定實力的所有操作就好像是以串行的次序發生的。

1.StringBuffer的特點

        ①他可以對字符串進行修改

        ②長度可變

        ③可以操作多種數據類型

        ④與String相似,擁有String類的大多數方法,可以通過toString()方法變成字符串。

2.StringBuffer的功能

(1)存儲

        1>append(數據)

        Append()可以接收各種數據類型,除了byte和short,但是int可以替代兩者,此類方法返回的還是本類對象,因為StringBuffer是可以被改變的,無需像String一樣返回一個新的字符串。

        2>inset(int offset,數據)

        此方法依舊是在本類對象中修改,offset指定是在此位置插入后面的數據。

(2)刪除

        1> delete(int start,int end)

        返回本類對象,刪除從start到end-1位置上的字符(包頭不包尾)。

        2> deleteCharAt(int index)

        返回本類對象,刪除指定位置index上的字符。

(3)獲取

        1> substring(int start,int end)

        返回的String類型,不是StringBuffer,依舊是截取從Strart到end-1這段字符串。

        2> chatAt(int index)

        返回字符類型,根據指定位置查找該位上的字符

        3> indexOf(String str)

        返回int類型,獲取子串str在緩沖區中的起始位置

        4> lastIndexOf(String str)

        返回int類型,獲取子串最后一次出現在緩沖區中的具體位置

(4)修改

        1> replace(int start,int end,String str)

        返回本類對象,將從start到end-1的這段字符串替換成str。

        2> setCharAt(int index,char ch)

        無返回值,將指定位置index上的元素替換為ch。

(5)反轉

        reverse()

        返回本類對象,將緩沖區中的內容反轉過來。

 

常用方法使用

 1 public class javaTest2 implements javaTest1 {
 2 
 3 public static void main(String[] args) {
 4 
 5     //字符串和字符串緩存的相互轉換
 6     String a="aaabbbccc";
 7     StringBuffer strb=new StringBuffer(a);
 8     System.out.println("strb(字符串緩存):"+strb);
 9     String b=strb.toString();
10     System.out.println("b(字符串):"+b);
11     
12     
13     //存儲(注:appand插在字符的尾部,insert是插在指定位置之前)
14     //(擴充appand)
15     strb.append(true);
16     System.out.println("strb擴充后1:"+strb);
17     strb.append("ddd");
18     System.out.println("strb擴充后2:"+strb);
19     char []c={'e','e','e'};
20     strb.append(c, 0, 2);
21     System.out.println("strb擴充后3:"+strb);
22     
23     //插入insert
24     strb.insert(0, '~');
25     System.out.println("strb插入后1:"+strb);
26     strb.insert(0, "~~");
27     System.out.println("strb插入后2:"+strb);
28     char []c1={'&','&','&'};
29     strb.insert(6, c1, 0, 3);
30     System.out.println("strb插入后3:"+strb);
31     
32     //返回當前內容的長度
33     System.out.println("strb's length:"+strb.length());
34     
35     //查找(返回第i位置處的字符)
36     System.out.println("strb's "+"2th "+"character is "+strb.charAt(2));
37     
38     //截取(返回內容中從位置start到結束的部分。同String.substring(int start))兩種
39     String str=strb.substring(5);
40     System.out.println("截取的部分str為:"+str);
41     String str1=strb.substring(5,9);
42     System.out.println("截取的部分str1為:"+str1);
43     
44     //查詢字符串位置
45     System.out.println("查詢的字符串&&第一次出現在strb的位置為:"+strb.indexOf("&&"));
46     System.out.println("查詢的字符串&&最后一次出現在strb的位置為:"+strb.lastIndexOf("&&"));
47     
48     //替代(也會改變目標字符)
49     StringBuffer strb1=strb.replace(0, 3, "");
50     System.out.println("替換后的strb: "+strb);
51     System.out.println("替換后的strb1:"+strb1);
52     
53     //刪除
54     System.out.println("刪除操作后的strb:"+strb.delete(3, 6));
55     
56     //返回當前空間的大小  如果空間滿了會自動擴展
57     System.out.println( "strb's space:"+strb.capacity());
58     
59     //翻轉
60     System.out.println("strb的翻轉:"+strb.reverse());
61 
62   }
63 }

運行結果:

 1 strb(字符串緩存):aaabbbccc
 2 b(字符串):aaabbbccc
 3 strb擴充后1:aaabbbccctrue
 4 strb擴充后2:aaabbbccctrueddd
 5 strb擴充后3:aaabbbccctruedddee
 6 strb插入后1:~aaabbbccctruedddee
 7 strb插入后2:~~~aaabbbccctruedddee
 8 strb插入后3:~~~aaa&&&bbbccctruedddee
 9 strb's length:24
10 strb's 2th character is ~
11 截取的部分str為:a&&&bbbccctruedddee
12 截取的部分str1為:a&&&
13 查詢的字符串&&第一次出現在strb的位置為:6
14 查詢的字符串&&最后一次出現在strb的位置為:7
15 替換后的strb: aaa&&&bbbccctruedddee
16 替換后的strb1:aaa&&&bbbccctruedddee
17 刪除操作后的strb:aaabbbccctruedddee
18 strb's space:25
19 strb的翻轉:eedddeurtcccbbbaaa

 

3. StringBuilder

        StringBuilder可以看做是StringBuffer的簡易替換,他們的功能一樣用法一樣。區別在於StringBuffer是線程同步的,而StringBuilder是線程不同步的。所以當我們的程序中只有一個線程時我們使用StringBuilder,這樣效率高。

 

總結:

其實如果把String類型看成一個基本類型的話,這樣StringBuffer和StringBuilder就類似於其包裝類。(個人看法~)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM