Java中的StringBuffer類——使用詳解

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章