1.概述
爲了解決String字符串操作導致的內存冗餘,提高效率,Java中提供了StringBuffer和StringBuilder來操作字符串,並且提供了很多方法,便於程序員開發。
StringBuffer和StringBuilder中都有char類型可變長數組作爲字符串的保存空間。使用到的方法類型和ArrayList類似。
但兩者又有不同:
StringBuffer 線程安全,效率較低
StringBuilder 線程不安全,效率較高
2.構造方法
StringBuffer();
創建一個未存儲任何字符串信息的空StringBuffer空間,底層初始化一個16個字符char類型數組
StringBuffer(String str);
根據提供的String類型字符串創建對應的
StringBuffer空間,底層char類型數組的容
量會根據str.length + 16決定,並且保存對應的str
/*
* StringBuffer構造方法演示
* StringBuilder同理
*/
public class Demo1 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer2 = new StringBuffer("武漢加油!中國加油!!");
System.out.println(stringBuffer);
System.out.println(stringBuffer2.toString());
}
}
運行結果:
武漢加油!中國加油!!
3.添加方法
append(Everything)
在StringBuffer和StringBuilder對象中,添加另外的數據,並且當做字符串處理。
insert(int index, Everything)
在StringBuffer和StringBuilder對象中,在指定的下標位置,添加其他內容,並且當做字符串處理
package stringBuffer;
import stringBuffer.Demo2;
/*
* StringBuffer append 和 insert方法演示
*/
public class Demo2 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("123456789");
//添加字符串
stringBuffer.append("武漢加油,中國加油!");
stringBuffer.append(new Demo2());
System.out.println(stringBuffer);
StringBuilder stringBuilder = new StringBuilder("ABCDEFGHIJKLMN");
stringBuilder.insert(3, "---");
stringBuilder.insert(9, "===");
System.out.println(stringBuilder);
}
}
運行結果:
123456789武漢加油,中國加油!stringBuffer.Demo2@6d06d69c
ABC---DEF===GHIJKLMN
4.查看方法
String toString();
將底層的char類型數組保存的字符內容轉換成對應的String類型字符串返回
int length();
返回底層char類型數組中有多少有效元素。
String substring(int begin);
從指定位置開始獲取到char類型數組有效元素末尾對應的字符串,截取操作,
String substring(int begin, int end);
從指定位置begin開始到end結束,獲取對應的字符串,要頭不要尾
int indexOf(String str);
指定元素字符串所在下標位置
int lastIndexOf(String str);
指定元素字符串最後一次所在下標位置
/*
* 查詢方法
*/
public class Demo3 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("12345中國加油6789");
//查詢指定元素首次出現的下標位置
System.out.println(stringBuffer.indexOf("中國加油"));
//獲取子集和
System.out.println(stringBuffer.substring(5));
System.out.println(stringBuffer.substring(5, 10));
System.out.println(stringBuffer.length());
}
}
運行結果:
5
中國加油6789
中國加油6
13
5.修改方法
replace(int start, int end, String str);
從指定位置start開始,到end結束,start <= n < end, 使用str替換
replace(int start, int end, String str);
從指定位置start開始,到end結束,start <= n < end, 使用str替換
/*
* 修改方法
*/
public class Demo4 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer("123456789");
//替換指定下標範圍的內容
stringBuffer.replace(1, 5, "中國加油");
System.out.println(stringBuffer);
//替換指定下標位置的元素
stringBuffer.setCharAt(6, 'A');
System.out.println(stringBuffer);
}
}
運行結果:
1中國加油6789
1中國加油6A89
6.刪除和反序
delete(int start, int end);
刪除指定範圍以內的字符 start <= n < end
deleteCharAt(int index);
刪除指定下標的字符
reverse();
逆序
/*
* 刪除和逆序方法
*/
public class Demo5 {
public static void main(String[] args) {
StringBuffer stb = new StringBuffer("123456789");
//刪除指定下標範圍的元素(要頭不要尾)
stb.delete(1, 5);
System.out.println(stb);
//刪除指定下標元素
stb.deleteCharAt(1);
System.out.println(stb);
//逆序
stb.reverse();
System.out.println(stb);
}
}
運行結果:
16789
1789
9871