StringBuffer類 一、 結構剖析 Java.lang.StringBuffer 代表可變的字元序列,可以對字元串內容進行增刪。 很多方法與String相同,但StringBuffer是可變長度的。 StringBuffer是一個容器。 String VS StringBuffer Stri ...
StringBuffer類
一、 結構剖析
-
Java.lang.StringBuffer 代表可變的字元序列,可以對字元串內容進行增刪。
-
很多方法與String相同,但StringBuffer是可變長度的。
-
StringBuffer是一個容器。
-
String VS StringBuffer
- String 保存的是字元串常量,裡面的值不能更改,每次String類的更新實際上就是更改地址,效率較低。
private final char value[];
- StringBuffer保存的是字元串變數,裡面的值可以更改,每次StringBuffer的更新實際上可以更新內容,不用更新地址,效率較高。
char[] value; //這個存放在堆里
- String 保存的是字元串常量,裡面的值不能更改,每次String類的更新實際上就是更改地址,效率較低。
//StringBuffer類的細節:
public class StringBuffer01 {
public static void main(String[] args) {
//1. StringBuffer 的直接父類 是 AbstractStringBuilder
//2. StringBuffer 實現了 Serializable,即StringBuffer的對象可串列化
//3. 在父類 AbstractStringBuilder 中有屬性 char value[] ,不是final
// 該 value數組 存放我們的字元串內容,是存放在堆中的而非常量池,value[]不是常量了
//4. StringBuffer 是一個final類,不能被繼承
//5. 因為StringBuffer 字元內容是存在 char[] value ,所以在變化時(增加/刪除)
// 不用每次都更換地址(即不是每次都創建新對象),所以效率高於 String(每次變化都會指向新的對象)
StringBuffer stringBuffer = new StringBuffer();
}
}
二、 StringBuffer轉換
-
StringBuffer的構造器
StringBuffer()
構造一個沒有字元的字元串緩衝區,初始容量為16個字元。 StringBuffer(CharSequence seq)
構造一個包含與指定的相同字元的字元串緩衝區 CharSequence
。StringBuffer(int capacity)
構造一個沒有字元的字元串緩衝區和指定的初始容量。 StringBuffer(String str)
構造一個初始化為指定字元串內容的字元串緩衝區。 public class StringBuffer02 { public static void main(String[] args) { //構造器的使用 //1. 創建一個大小為 16的char[],用於存放字元內容 StringBuffer stringBuffer = new StringBuffer(); //2. 通過構造器指定 char[] 大小 StringBuffer stringBuffer1 = new StringBuffer(100); //3. 通過 給一個String 創建 StringBuffer,char[] value的大小就是 str.length + 16 StringBuffer hello = new StringBuffer("hello"); //4. 創建StringBuffer,包含與指定的CharSequence相同的字元。 // StringBuffer(CharSequence seq) } }
-
StringBuffer 和 String 之間的轉換
-
String ——> StringBuffer:
方式1:使用構造器
方式2:使用 append方法
-
StringBuffer ——> String
方式1:使用StringBuffer 提供的 toString方法
方式2:使用構造器
public class StringAndStringBuffer { public static void main(String[] args) { //看 String ——> StringBuffer String str = "hello tom"; //方式1 使用構造器 //註意:返回的才是StringBuffer對象,對str本身沒有影響 StringBuffer stringBuffer = new StringBuffer("str"); //方式2 使用的是 append方法 StringBuffer stringBuffer1 = new StringBuffer(); stringBuffer1.append(str); //看 StringBuffer ——> String StringBuffer stringBuffer2 = new StringBuffer("你好!"); //方式1:使用StringBuffer 提供的 toString方法 String s = stringBuffer2.toString(); //方式2:使用構造器 String s2 = new String(stringBuffer2); } }
-
三、 StringBuffer的常見方法
- 增
append()
- 刪
delete(start,end)
- 改
replace(start,end,string)
,將start~end之間的內容替換掉,不含end。 - 查
indexOf()
,查找子串在字元串第一次出現的索引,如果找不到返回 -1. - 插
insert()
- 獲取長度
length()
public class StringBufferMethod {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');// "hello,"
s.append("張三豐");// "hello,張三豐"
s.append("趙敏").append(100).append(true).append(10.5);// "hello,張三豐100true10.5"
System.out.println(s);
//刪
/*
刪除索引 >= start && < end 處的字元
解讀:刪除 11 ~ 14 的字元 [11,14)
*/
s.delete(11,14);
System.out.println(s);//hello,張三豐趙敏true10.5
//改
//使用 周芷諾 替換 索引 9 - 11 的字元 [9,11)
s.replace(9,11,"周芷若");
System.out.println(s);//hello,張三豐周芷若true10.5
//查找指定的子串在字元串中第一次出現的索引,如果找不到返回-1
int indexOf = s.indexOf("張三豐");
System.out.println(indexOf);//6
//插
//在索引為9的位置插入 "趙敏",原來索引為9的內容自動後移
s.insert(9,"趙敏");
System.out.println(s);//hello,張三豐趙敏周芷若true10.5
//長度
System.out.println(s.length());
System.out.println(s);
}
}