StringBuffer

StringBuffer

是一个线程安全的可变的字符序列,提供了字符串缓冲区(里面存储的内容都是字符串数据)

构造方法

  • public StringBuffer():默认缓冲区大小,初始容量16个字符 (默认缓冲区大小足够!)
  • public StringBuffer(int capacity):指定固定大小的初始容量,构造一个字符串缓冲区
  • public StringBuffer(String str):构造一个缓冲区大小,容量大小等于字符串长度+初始容量16

获取功能

  • public int capacity():获取字符串缓冲区的容量大小!
  • public int length():获取字符串缓冲区中的字符串长度!

代码如下

package CSDN_Test;

public class StringBufferDemo {
	
	public static void main(String[] args) {
		//两个类型不一样:接收的类型:StringBuffer  数据内容:String类型
		//StringBuffer buffer =  "hello" ;//Type mismatch: cannot convert from String to StringBuffer
		//public StringBuffer():默认缓冲区大小,初始容量16个字符  (默认缓冲区大小足够!)
		StringBuffer sb = new StringBuffer() ;
		System.out.println(sb);
		System.out.println(sb.capacity());//16
		System.out.println(sb.length());//0
		System.out.println("-----------------------");
		
		//public StringBuffer(int capacity):指定固定大小的初始容量,构造一个字符串缓冲区
		StringBuffer sb2 = new StringBuffer(50) ;
		System.out.println(sb2);
		System.out.println(sb2.capacity());//50
		System.out.println(sb2.length());//0
		System.out.println("-----------------------");
//		public StringBuffer(String str)
		StringBuffer sb3 = new StringBuffer("hello") ; //指定字符串内容的缓冲区
		System.out.println(sb3);//hello
		System.out.println(sb3.capacity());//21
		System.out.println(sb3.length());//5
		
		String s = "hello" ;
		//StringBufffer sb4 = s; //两种类型不匹配
		StringBuffer sb4 = new StringBuffer(s);
	}
}	

添加功能:

  • append(boolean /int/String…)追加到末尾(末尾追加),可以追加 任何数据,返回值是它本身
  • public StringBuffer insert(int offset,String str):在指定位置处添加指定的字符串(在指定位置处的前面插入数据)
package CSDN_Test;
public class StringBufferDemo2 {
	
	public static void main(String[] args) {
		//创建一个字符串缓冲区大小
		StringBuffer sb = new StringBuffer() ;
		//System.out.println(sb.append("hello"));
		//System.out.println(sb.append(true));
		//System.out.println(sb.append('a'));
		sb.append("hello").append(true).append('a').append("world") ;
		System.out.println(sb);//hellotrueaworld
		System.out.println("---------------------------");
		sb.insert(5, "javaee") ;
		System.out.println(sb);//hellojavaeetrueaworld
	}
}

删除功能:

  • public StringBuffer deleteCharAt(int index)删除指定索引处的字符,返回缓冲区本身 (推荐)
  • public StringBuffer delete(int start, int end)删除从指定位置开始到指定位置结束的字符(包前不包后)end-1处
package CSDN_Test;
public class StringBufferDemo3 {
	
	public static void main(String[] args) {
		
		//创建一个字符串缓冲区大小
		StringBuffer sb = new StringBuffer() ;
		//追加
		sb.append("hello") ;
		sb.append("world") ;
		sb.append("Javaee") ;
		System.out.println(sb);//helloworldJavaee
		
		//需求:删除第一个l字符
		//sb.deleteCharAt(2) ;
		//System.out.println(sb);
		//需求:删除第二个l字符
		//sb.deleteCharAt(2);
		//System.out.println(sb);
		System.out.println("-----------------------------");
		//public StringBuffer delete(int start,  int end)
		sb.delete(5, 9) ; //包前不包后
		System.out.println(sb);//hellodJavaee
		sb.delete(5, sb.length()) ; 
		System.out.println(sb);//hello
		
	}
}

替换功能以及反转功能

  • public StringBuffer replace(int start ,int end, String str)从指定位置开始到指定位置结束(end-1处)位置的字符使用新的str字符串替换掉

  • public StringBuffer reverse() :将字符串缓冲区的字符串进行反转

package CSDN_Test;
public class StringBufferDemo4 {
	
	public static void main(String[] args) {
		//构造一个缓冲区大小 (一般情况都是一个字符数组/字节数组)
		StringBuffer sb = new StringBuffer() ;
		
		//追加内容
		sb.append("hello") ;
		sb.append("world") ;
		sb.append("JavaEE") ;
		//	public StringBuffer replace(int start ,int end,   String str)
		sb.replace(5, 10, "节日快乐") ;
		System.out.println(sb);//hello节日快乐JavaEE
		System.out.println("--------------------");
		System.out.println(sb.reverse()) ; //将缓冲区中的字符串进行逆序!---EEavaJ乐快日节olleh
		
		//键盘录入一个字符串:将字符串反转
		//方式1:使用空串拼接 (逆序)
		//方式2:创建一个StringBuffer对象--->利用reverse()方法反转
		//将StringBuffer--->String :toString()
	}
}

截取功能

  • public String substring(int start):从指定位置默认截取到末尾
  • public String substring(int start,int end)从指定位置截取到指定位置(end-1)处结束
package CSDN_Test;
public class StringBufferDemo5 {
	
	public static void main(String[] args) {
		
		StringBuffer sb = new StringBuffer() ;
		sb.append("hello").append("world") ;
		System.out.println(sb);//helloworld
		//public String substring(int start):从指定位置默认截取到末尾
		//String s = sb.substring(5) ;
		//System.out.println(s);
		//System.out.println(sb);
		
//		public String substring(int start,int end)
		String s = sb.substring(5, 10) ;
		System.out.println(s);//world 包前不包后
		
		
	}
}

StringBuffer面试题

1)String,StringBuffer,StringBuilder的区别?

  • String : 字符串是一个常量,而且是不可变的字符序列;一旦被赋值,其值不能被更改(地址值)
    String s = “abc”;
    s = “abcd” ;
  • StringBuffer:是一个可变的字符序列,缓冲区中可以无限追加任何内容 “字符串”;线程安全的类---->多线程程序中会使用安全的类---->同步的---->执行效率低(内存角度)
  • StringBuilder:和StringBuffer具有兼容的API,单线程程序中:StringBuilder去替代StringBuffer;是一个线程不安全的类----->不同步的----->执行效率高! (内存角度)
    String类型是一个特殊的引用类型,String类型作为形式参数,形参的改变不会影响实际参数和基本类型作为形式参数的效果一样!
    StringBuffer/StringBuilder作为形式参数,形参的改变会直接影响实际参数!引用类型都空间值(地址值传递),但是String是最特殊的!

2)StringBuffer和数组的区别?

  • 共同点都"容器"
  • 存储类型
    StringBuffer:里面存储从字符串内容
    StringBuffer sb = new StringBuffer() ;
    sb.append(“hello”).append(true) …;
    数组:只能存储同一种类型的元素
    数组:不仅仅可以存储基本类型,还可以存储引用类型(但是元素的类型一致)
    对象数组:专门存储对象
    Student[] students = new Student[5] ; //引用类型:存储5个学生
    int[] arr = new int[3] ; //基本类型
  • 长度的区别:
    StringBuffer获取字符串长度:length()
    数组中获取数组的长度:length属性!

字符串的两种反转方式

public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//录入
		System.out.println("请您输入一个字符串内容:");
		String line = sc.nextLine() ;
		String result = reverse(line) ;
		System.out.println("result:"+result);
		System.out.println("-------------------------------");
		String result2 = reverse2(line) ;
		System.out.println("result2:"+result2);
	}
	
	//方式2:
	public static String reverse2(String s) {
		//构造一个缓冲区
		//利用无参+append(String str)
		/*StringBuffer sb = new StringBuffer() ;
		sb.append(s) ;*/
		
		//有参构造方法
		//StringBuffer sb = new StringBuffer(s) ;
		//将StringBuffer中的字符序列反转
		//return sb.reverse().toString() ;
		
		//一步走:
		return new StringBuffer(s).reverse().toString() ;
	}
	
	
	//方式1:
	public static String reverse(String s) {
		//定义一个空串
		String result = "" ;
		//将s转换成字符数组
		char[] chs = s.toCharArray() ;
		for(int x = chs.length-1 ; x >=0 ; x --) {
			result += chs[x] ;
		}
		return result ;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值