StringBuffer类

一:StringBuffer类概述
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题。

StringBuffer:线程安全的可变字符序列。
StringBuffer与String的区别?
A:前者长度的内容可变,后者不可变
B:如果使用前者进行字符产拼接,不浪费太多资源,在原字符序列上进行拼接,不需要改变引用。

1:构造方法

public StringBuffer() //无参构造,一般使用第一个。StringBuffer sb = new StringBuffer();//创建字符串缓冲区

public StringBuffer(int capacity)//指定容量的字符串缓冲区对象
public StringBuffer(String str)//指定字符串内容的字符串缓冲区对象

2:StringBuffer的方法

获取功能
public int capacity ();返回当前容量,理论值
public int length ();返回长度,实际值

添加功能
public StringBuffer append(String str)//可以把任意类型数据添加到字符串缓冲区,及串尾,并返回字符串缓冲区本身。
public StringBuffer insert(int offset,String str)//在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

删除功能
public StringBuffer deleteCharAt(int index)//删除指定位置的字符,并返回本身

public StringBuffer delete(int start,int end)//删除从指定位置开始到end-1的内容,并返回本身(包左不包右)

替换功能
public StringBuffer replace(int start,int end,String str)//从start开始到end-1用str替换,并返回本身,(包左不包右)

反转功能 public StringBuffer reverse() //反转字符串缓冲区中的内容,返回本身

截取功能
public String substring(int start)//从指定位置开始到结尾进行截取
public String substring(int start,int end)//从指定位置到end-1进行截取
截取功能和前面几个功能的不同
返回值类型String类型,StringBuffer本身对象没有发生改变

**案例1**:String和StringBuffer之间的转换

public class StringBufferTest {
public static void main(String[] args) {
	String s = "Hello";
	
	//String —— StringBuffer
	//方式一:构造方法
	StringBuffer sb = new StringBuffer(s);
	System.out.println(sb);
	
	//方拾二:attend方法
	StringBuffer sb1 = new StringBuffer(s);
	sb.append(s);
	System.out.println(sb1);
	
	//StringBuffer —— String
	//方式一:构造方法
	StringBuffer sb2 = new StringBuffer("Java");
	String s1 = new String(sb2);
	System.out.println(sb2);
	
	//方式二:toString方法
	s1 = sb2.toString();
	System.out.println(sb2);
	
}
}
**案例二**:用reverse()方法将字符串进行反转
public class StringBufferTest1 {
	public static void main(String[] args) {
		String s = "我不爱你宝贝";
		System.out.println(s);
		
		StringBuffer sb = new StringBuffer(s);//将字符串转换为StringBuffer类型
		sb.reverse();//调用StringBuffer类中的反转方法
		
		//将StringBuffer转换为String类型
		
		//方式一:用toString方法
		s = sb.toString();
		System.out.println(s);
		
		//方式二:用String的构造方法
		String s1 = new String (sb);
		System.out.println(s1);
		
	}
}
**案例三**:判断字符串是否对称
public class StringBufferTest2 {
public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入要判断的字符串");
	String s = sc.nextLine();
	
	
	System.out.println(StringBufferTest2.isSame(s));
	System.out.println(StringBufferTest2.isSame1(s));
}

//将字符串转换为字符数组,再遍历比较
public static boolean isSame(String s ){
	char ch [] = s.toCharArray();
	
	for (int start = 0, end = ch.length -1; start <= end ;start++,end--){
		if(ch[start] != ch[end]){
			return  false;
		}
		
	}
	return true;
}

//使用StringBuffer功能
public static boolean isSame1(String s ){
	return new StringBuffer(s).reverse().toString().equals(s); 
}
}

**案例四**面试题

1:String ,StringBuffer,StringBuilder的区别?
A:String是内容不可变的,而StringBuffer,StringBuilder都是可变的。
B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高

2:StringBuffer和数组的区别?
二者都可以看做一个容器,装其他数据,但是StringBuffer的数据最终是一个字符串数据,而数组可以放置多种数据,但必须是同一种类型的。

3形式参数问题
String作为参数传递:效果和基本类型作为参数传递是一样的
StringBuffer作为参数传递:效果是正常的引用类型传参效果

形式参数:基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数


public class StringBufferTest3 {
public static void main(String[] args) {
	String s1 = "Hello";
	String s2 = "world";
	
	System.out.println(s1+ "——————"+s2);//原本字符串
	change(s1,s2);
	System.out.println(s1+ "——————"+s2);//用String类型作为参数传递进行change()方法
	
	StringBuffer sb1 = new StringBuffer(s1);
	StringBuffer sb2 = new StringBuffer(s2);
	change1(sb1,sb2);
	System.out.println(sb1+ "——————"+sb2);//用StringBuffer类型作为参数传递进行change()方法
}


private static void change1(StringBuffer s1, StringBuffer s2) {
	// TODO Auto-generated method stub
	s1 = s2;
	s2 = s2.append(s1);
}


public  static void change(String s1, String s2) {
	// TODO Auto-generated method stub
	s1 = s2;
	s2 = s2 + s1;
	
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值