String是不變類,用String修改字元串會建立一個String對象,如果頻繁的修改,将會産生很多的String對象,開銷很大.是以java提供了一個StringBuffer類,這個類在修改字元串方面的效率比String高了很多。
在java中有3個類來負責字元的操作。
1.Character 是進行單個字元操作的,
2.String 對一串字元進行操作。不可變類。
3.StringBuffer 也是對一串字元進行操作,但是可變類。
1 public class UsingStringBuffer {
2 /**
3 * 查找比對字元串
4 */
5 public static void testFindStr() {
6 StringBuffer sb = new StringBuffer();
7 sb.append("This is a StringBuffer");
8 // 傳回子字元串在字元串中最先出現的位置,如果不存在,傳回負數
9 System.out.println("sb.indexOf(\"is\")=" + sb.indexOf("is"));
10 // 給indexOf方法設定參數,指定比對的起始位置
11 System.out.println("sb.indexOf(\"is\")=" + sb.indexOf("is", 3));
12 // 傳回子字元串在字元串中最後出現的位置,如果不存在,傳回負數
13 System.out.println("sb.lastIndexOf(\"is\") = " + sb.lastIndexOf("is"));
14 // 給lastIndexOf方法設定參數,指定比對的結束位置
15 System.out.println("sb.lastIndexOf(\"is\", 1) = "
16 + sb.lastIndexOf("is", 1));
17 }
18
19 /**
20 * 截取字元串
21 */
22 public static void testSubStr() {
23 StringBuffer sb = new StringBuffer();
24 sb.append("This is a StringBuffer");
25 // 預設的終止位置為字元串的末尾
26 System.out.print("sb.substring(4)=" + sb.substring(4));
27 // substring方法截取字元串,可以指定截取的起始位置和終止位置
28 System.out.print("sb.substring(4,9)=" + sb.substring(4, 9));
29 }
30
31 /**
32 * 擷取字元串中某個位置的字元
33 */
34 public static void testCharAtStr() {
35 StringBuffer sb = new StringBuffer("This is a StringBuffer");
36 System.out.println(sb.charAt(sb.length() - 1));
37 }
38
39 /**
40 * 添加各種類型的資料到字元串的尾部
41 */
42 public static void testAppend() {
43 StringBuffer sb = new StringBuffer("This is a StringBuffer!");
44 sb.append(1.23f);
45 System.out.println(sb.toString());
46 }
47
48 /**
49 * 删除字元串中的資料
50 */
51 public static void testDelete() {
52 StringBuffer sb = new StringBuffer("This is a StringBuffer!");
53 sb.delete(0, 5);
54 sb.deleteCharAt(sb.length() - 1);
55 System.out.println(sb.toString());
56 }
57
58 /**
59 * 向字元串中插入各種類型的資料
60 */
61 public static void testInsert() {
62 StringBuffer sb = new StringBuffer("This is a StringBuffer!");
63 // 能夠在指定位置插入字元、字元數組、字元串以及各種數字和布爾值
64 sb.insert(2, 'W');
65 sb.insert(3, new char[] { 'A', 'B', 'C' });
66 sb.insert(8, "abc");
67 sb.insert(2, 3);
68 sb.insert(3, 2.3f);
69 sb.insert(6, 3.75d);
70 sb.insert(5, 9843L);
71 sb.insert(2, true);
72 System.out.println("testInsert: " + sb.toString());
73 }
74
75 /**
76 * 替換字元串中的某些字元
77 */
78 public static void testReplace() {
79 StringBuffer sb = new StringBuffer("This is a StringBuffer!");
80 // 将字元串中某段字元替換成另一個字元串
81 sb.replace(10, sb.length(), "Integer");
82 System.out.println("testReplace: " + sb.toString());
83 }
84
85 /**
86 * 将字元串倒序
87 */
88 public static void reverseStr() {
89 StringBuffer sb = new StringBuffer("This is a StringBuffer!");
90 System.out.println(sb.reverse()); // reverse方法将字元串倒序
91 }
92 }
小結:
StringBuffer不是不變類,在修改字元串内容時,不會建立新的對象,是以,它比String類更适合修改字元串。
StringBuffer類沒有提供同String一樣的toCharArray方法
StringBuffer類的replace方法同String類的replace方法不同,它的replace方法有三個參數,第一個參數指定被替換子串的起始位置,第二個參數指定被替換子串的終止位置,第三個參數指定新子串