API中的常用类之StringBuffer类

1.StringBuffer类

(1)StringBuffer:线程程安全的可变字符序列
线程(后面多线程中讲)
线程安全 --->同步的---->执行效率低        举例:银行的网站,医疗平台...
线程不安全---->不同步---->执行效率高        举例:新闻网站,XXX论坛...
[面试题]
     StringBuffer和String的区别?
     前者是一个可变的字符序列,后者是不可变的字符序列
     如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存
                                 而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉

(2)StringBuffer的构造方法:
   StringBuffer() :无参构造的形式,初始容量16
   StringBuffer(int capacity) :指定容量构造一个字符串缓冲区
   StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容

StringBuffer的获取功能:
   public int length()返回长度
   public int capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的))

public static void main(String[] args) {
		//StringBuffer() :无参构造的形式,初始容量16
		//创建一个字符串缓冲区
		StringBuffer sb = new StringBuffer() ; //实际开发中,默认无参构造
		System.out.println("sb:"+sb);//:当前缓冲区没有字符序列...,重写了toString()方法
		System.out.println("length():"+sb.length());
		System.out.println("capacity():"+sb.capacity());
		System.out.println("------------------------");
		
	        //StringBuffer(int capacity) :指定容量构造一个字符串缓冲区
		StringBuffer sb2 = new StringBuffer(50) ;
		System.out.println("length():"+sb2.length());
		System.out.println("capacity():"+sb2.capacity());
		System.out.println("------------------------");
		
		//StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
		StringBuffer sb3 = new StringBuffer("hello");
		System.out.println("sb3:"+sb3);
		System.out.println("length():"+sb3.length());
		System.out.println("capacity():"+sb3.capacity());//初始容量+当前字符数
		
		//StringBuffer sb4 = "hello" ; 不能直接转换(不能直接将一个字符串类赋值给一个对象类型 StringBuffer)		
		
	}

注:
    1)实际开发中,默认无参构造StringBuffer()
    2)StringBuffer sb = "hello" ; 错误 ! 不能直接将一个字符串类赋值给一个对象类型 StringBuffer

(3)StringBuffer的添加功能
   (实际开发中用的多)public StringBuffer append(String/boolean....) :在字符串缓冲区中追加数据(在末尾追加),并且返回字符  串缓冲区本身 
    public StringBuffer insert(int offset,String str):将当前str字符串添加到指定位置处,它返回字符串缓冲区本身

public static void main(String[] args) {
		
		//创建一个字符串缓冲区对象
		StringBuffer sb = new StringBuffer() ;

		//直接追加功能
		sb.append("hello") ;
		sb.append('A');
		sb.append(true);
		sb.append(100);
		sb.append("world") ;
		sb.append(3.14) ;
		System.out.println("sb:"+sb);
				
		System.out.println("---------------------------");
		
		//public StringBuffer insert(int offset,String str)将当前str字符串添加到指定位置处,它返回字符串缓冲区本身		
		sb.insert(5, "JavaSE");
		System.out.println("sb:"+sb);
		
	}

(4)StringBuffer的删除功能:
  
  public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
  public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...

public static void main(String[] args) {
		
		//创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer() ;
		
		//追加
		sb.append("hello");
		sb.append("world");
		sb.append("java");
		
		System.out.println("sb:"+sb);
		
		//需求:移除'e'这个字符
		//public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
		/*sb.deleteCharAt(1);
		System.out.println("sb:"+sb);
		
		//需求:移除第一个'l'这个字符
		sb.deleteCharAt(1);
		System.out.println("sb:"+sb);*/
		
		//public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
		//需求:移除world
		sb.delete(5, 10);
		System.out.println("sb:"+sb);
		
	}

(5)StringBuffer的反转功能: 必须记住!
    public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身

public static void main(String[] args) {
		
		//创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer() ;
		
		//添加
		sb.append("圆圆高爱我") ;		
		System.out.println("sb:"+sb);
		
		//开始反转
		sb.reverse() ;
		System.out.println("sb:"+sb);
	}

(6)StringBuffer的截取功能:
    public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
    public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串

public static void main(String[] args) {
		
		//创建StringBuffer对象
		StringBuffer sb = new StringBuffer() ;
		
		//添加
		sb.append("hello");
		sb.append("world");
		sb.append("java");
		sb.append("JavaWeb") ;
		
		System.out.println("sb:"+sb);
		//public String substring(int start):
		/*String str = sb.substring(5) ;
		System.out.println("str:"+str);*/
		
		System.out.println("------------------------");
		//public String substring(int start,int end) 		
		String str2 = sb.substring(5, 10) ;
		System.out.println("str2:"+str2);//返回的是被截取的字符串
		
	}

扫描二维码关注公众号,回复: 772165 查看本文章
(7)StringBuffer的替换功能: 
   public StringBuffer replace(int start,int end,String str) :从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身

public static void main(String[] args) {
		
		//创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer();
		
		//添加
		sb.append("hello") ;
		sb.append("world") ;
		sb.append("java") ;
		
		System.out.println("sb:"+sb);
		
		//public StringBuffer replace(int start,int end,String str)
		sb.replace(5, 10,"生日快乐") ;
		System.out.println("sb:"+sb);
		
	}

(8) String和StringBuffer之间的相互转换
1)String--->StringBuffer
  首先定义一个字符串  String s = "hello";
 //方式1 :带参构造,StringBuffer(String str)
StringBuffer sb = new StringBuffer(s) ;
System.out.println("sb:"+sb);//sb:hello

//方式2:可以通过无参构造创建字符串缓冲区对象,给缓冲区中追加内容
StringBuffer sb = new StringBuffer() ;
sb.append(s) ;		
System.out.println("sb:"+sb);//sb:hello

2)StringBuffer--->String
首先定义一个字符串缓冲区 StringBuffer buffer = new StringBuffer("world") ;

//方式1:public String(StringBuffer buffer)分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列

String str = new String(buffer) ;
System.out.println("str:"+str);//str:world

//方式2:StringBuffer的功能:public String toString()返回此序列中数据的字符串表示形式
String str = buffer.toString() ;
System.out.println("str:"+str);//str:world
[面试题1]
StringBuffer,String,StringBuilder的区别?
 StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区.(两者都看做容器)
           StringBuffer:线程安全的,同步的,执行效率低
           StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder
 StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区
[面试题2]
StringBuffer和数组的区别?
数组:它是可以存储多个数据的容器,并且多个数据的类型必须一致
       数组长度功能:length属性
StringBuffer:它是容器,它在缓冲区始终存储的只能字符串类型的数据
                     获取缓冲区的长度:length()

猜你喜欢

转载自blog.csdn.net/xing_ran_ran/article/details/80218302