java基础学习之StringBuffer类

概述

  • 字符缓冲区类
  • 线程安全的可变字符串序列
  • final修饰不能有子类
  • 和String的区别

String-----不可变的字符序列
StringBuffer----可变的字符序列,append等方法实现。

构造方法

编号构造方法说明
aStringBuffer()构造一个没有字符的字符串缓冲区,初始容量为16个字符。
bStringBuffer(CharSequence seq)构造一个包含与指定的相同字符的字符串缓冲区CharSequence(是char值的可读序列。
cStringBuffer(int capacity)构造一个没有字符的字符串缓冲区和指定的初始容量。
dStringBuffer(String str)构造一个初始化为指定字符串内容的字符串缓冲区。
- 每个字符串缓冲区都有一个容量。
- 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区**数组**。
- 如果内部缓冲区溢出,则会自动变大。 
StringBuilder类
jdk1.5推出,支持所有相同的操作,但由于不执行同步更快,所以一般优先选择StringBuilder。

使用范例

//a
		//最常用
		StringBuffer sb = new StringBuffer();
		len = sb.length();    //   0
		cap = sb.capacity();  //   16

//b 不常用

//c
		StringBuffer sb2 = new StringBuffer(10); 
		len = sb.length();    //  0
		cap = sb.capacity();  //  16
//d
		StringBuffer sb3 = new StringBuffer("mona"); 
		len = sb.length();    //  4
		cap = sb.capacity();  //  20

成员方法

length() && capacity()

len = sb.length(); 容器的初始容量,理论值
cap = sb.capacity(); 容器中的字符个数,实际值(String没有)

append() && insert()

编号构造方法说明
apublic StringBuffer append(String str)可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
bpublic StringBuffer insert(int offset,String str)指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
	StringBuffer sb = new StringBuffer();
	StringBuffer sb2 = sb.append(true);
	StringBuffer sb3 = sb.append("mona");
	StringBuffer sb4 = sb.insert(4,100)
//完成上述操作后,得到结果sb,sb2,sb3,sb4的值均为 true100mona
- 实际上append()和insert()方法操作的都是同一对象,不同引用sb sb2等引用都指向了同一个地址。
- 两个方法都采用重载,可以传入各种数据类型
- insert(int offset,String str)方法中的offset值易越界,报索引越界异常,需注意判断

toString()

StringBuffer类重写了Object类的toString()方法,显示的是对象的属性值。

	System.out.println(sb.toString());
	//得到数据的字符串形式

deleteCharAt() && delete()

编号构造方法说明
apublic StringBuffer deleteCharAt(int index)删除指定位置的字符,并返回本身
bpublic StringBuffer delete(int start,int end)删除从指定位置开始指定位置结束的内容,并返回本身
	StringBuffer sb = new StringBuffer("mona");
	sb.deleteCharAt(3);
	System.out.println(sb.toString());
	sb.delete(1,2);  //包含头,不包含尾
	System.out.println(sb.toString());
//得到结果mon  mn
- 两个方法中涉及的索引值均易越界,报索引越界异常,需注意判断。
- delete()方法只包含头,不包含尾。

replace() && reverse()

编号构造方法说明
apublic StringBuffer replace(int start,int end,String str)从start开始end用str替换
bpublic StringBuffer reverse()字符串反转
	StringBuffer sb = new StringBuffer("mona");
	sb.replace(2,4,"ly");
	System.out.println(sb.toString());
	sb.reverse();
	System.out.println(sb.toString());
	//得到结果moly  ylom
- replace方法中涉及的索引值均易越界,报索引越界异常,需注意判断。
- replace()方法只包含头,不包含尾。
- 不宜用String sb = new StringBuffer()来删除内容,实际是换了引用,原对象变垃圾。

substring()

public String substring(int start) — 截取start(包含)到末尾
public String substring(int start,int end) —截取start(包含)到end(不包含)

	StringBuffer sb = new StringBuffer("monalily");
	String s1 = sb.substring(3);
	System.out.println(s1);
	String s2 = sb.substring(1,3);
	System.out.println(s2);
	System.out.println(sb.toString());
	//得到结果 alily on monalily
- substring不对原StringBuffer对象产生影响,而是生成新的String对象,需要新的引用接收。

substring()

public String substring(int start) — 截取start(包含)到末尾
public String substring(int start,int end) —截取start(包含)到end(不包含)

	StringBuffer sb = new StringBuffer("monalily");
	String s1 = sb.substring(3);
	System.out.println(s1);
	String s2 = sb.substring(1,3);
	System.out.println(s2);
	System.out.println(sb.toString());
	//得到结果 alily on monalily
- substring不对原StringBuffer对象产生影响,而是生成新的String对象,需要新的引用接收。

String和StringBuffer的相互转换

String–>StringBuffer

public String substring(int start) — 截取start(包含)到末尾
public String substring(int start,int end) —截取start(包含)到end(不包含)

	StringBuffer sb = new StringBuffer("monalily");
	String s1 = sb.substring(3);
	System.out.println(s1);
	String s2 = sb.substring(1,3);
	System.out.println(s2);
	System.out.println(sb.toString());
	//得到结果 alily on monalily
- substring不对原StringBuffer对象产生影响,而是生成新的String对象,需要新的引用接收。

String–>StringBuffer

a.通过StringBuffer的构造方法
b.通过StringBuffer的append()方法

	String s1 = "1234upupup";
	//a
	StringBuffer sb1 = new StringBuffer(s1);
	System.out.println(sb1);
	//b
	StringBuffer sb2 = new StringBuffer();
	sb2.append(s1);
	System.out.println(sb2);

StringBuffer–>String

a.通过String的构造方法
b.StringBuffer的toString方法
c.StringBuffer的substring方法

	StringBuffer sb1 = new StringBuffer("upupup121");
	//a
	String s1 = new String(sb1);
	System.out.println(s1);
	//b
	String s2 = sb1.toString();
	System.out.println(s2);
	//c
	String s3 = sb1.substring(0,sb1.length());
	System.out.println(s3);

综合应用范例

把数组转成字符串

把数组中的数据按指定格式拼接成一个字符串

例:int[] arr = {1,2,4}; ----> “[1,2,4]”

	int[] arr = {1,2,4};
	StringBuffer sb = new StringBuffer();
	sb.append("[");
	for(int i=0;i<arr.length;i++){
		if(i==0){
			sb.append(arr[i]);
		}else{
			sb.append(","+arr[i]);
		}
	}
	sb.append("]");
	System.out.println(sb.toString());

字符串反转

例:键盘输入“abc”,输出结果“cba”.

	Scanner sc = new Scanner(System.in);
		String s1 = sc.nextLine();
		StringBuffer sb1 = new StringBuffer(s1);
		sb1.reverse();
		System.out.println(sb1.toString());

三种字符类区别

StringBuffer、StringBuilder

StringBuffer是线程安全的,效率低
StringBuilder是线程不安全的,效率高

String和上述两类

String是一个不可变的字符序列
StringBuffer和StringBuilder是可变的字符序列

作为参数时区别

回顾知识:
-基本数据类型的值传递时,赋值其值,本身不改变其值
-引用数据类型的值传递时,赋值其址,本身改变其值,不改变其址

String类虽为引用数据类型,但其作为参数传递时用法和基本数据类型一样。
StringBuffer类则是标准的引用数据类型的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值