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

你可能感兴趣的:(字符串,java)