StringBuffer类的概述和功能

StringBuffer类的概述和功能

StringBuffer类的概述:

String Buffer类的该概述:
	String对象创建后就不可改变,针对每次对字符串拼接都需要创造一个新的String对象,耗时切浪费空间;
	StringBuffer是线程安全的可变字符序列,相当于一个字符容器,你可以不断的往容器中追加字符。
案例:
	public class BlogTest1 {
    public static void main(String[] args) {
        //新建一个StringBuffer()字符串容器;
        StringBuffer sbuff = new StringBuffer();
        //给字符串容器中追加数据,默认16个字节,但是可以扩容;
        sbuff.append("123456789123456789");
        //获取字符串容器容量
        int capacity = sbuff.capacity();
        System.out.println("容量 "+capacity);
        //获取字符串容器中字符串的长度
        int length = sbuff.length();
        System.out.println("长度 "+length);
    	}
	}
//打印结果:
	容量 34
	长度 18

	Process finished with exit code 0

StringBuffer类的添加和删除功能

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

添加案例:
	public class BlogTest2 {
    public static void main(String[] args) {
        StringBuffer sbuff = new StringBuffer();
        //往容器中追加数据,返回的还是原来的那个容器对象
        StringBuffer sbuff2 = sbuff.append("hello");
        System.out.println(sbuff2);
        //StringBuffer 里面的数据也是编有索引的。
        insert(0, "eeee");  在容器中的指定位置,插入数据,返回的还是原来的容器。
        StringBuffer sbuff3 = sbuff2.insert(sbuff.length() , "java");
        System.out.println(sbuff3);
        //StringBuffer 重写了toString()方法,把容器中的数据转换成字符串返回
        String s = sbuff2.toString();
        System.out.println(s);
    }
}
结果:
	hello
	hellojava
	hellojava

	Process finished with exit code 0

删除功能:
	public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
	public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并	返回本身
删除案例:
	public class BlogTest2 {
    public static void main(String[] args) {
        //public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
        StringBuffer sbuff = new StringBuffer("abcdefg");
        StringBuffer sbuff2 = sbuff.deleteCharAt(1);
        System.out.println("deleteCharAt删除指定位置的字符,返回本身 " + sbuff2);
        //public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的		内容,并返回本身
        StringBuffer sbuff3 = sbuff.delete(1, 3);
        System.out.println("delete删除指定范围的字符串,返回本身 " + sbuff3);
    }
}
结果:
	deleteCharAt删除指定位置的字符,返回本身 acdefg
	delete删除指定范围的字符串,返回本身 aefg

	Process finished with exit code 0

StringBuffer类的替换和反转功能:

StringBuffer的替换功能:
	public StringBuffer replace(int start,int end,String str):	从start开始到end用str替换
	
替换案例演示: 
	public class BlogTest3 {
    public static void main(String[] args) {
        //StringBuffer的替换功能
        //public StringBuffer replace(int start,int end,String str):	从start开始到	end用str替换
        StringBuffer s1 = new StringBuffer("abcdefg");
        //打印容器里原来的存放的字符串;
        System.out.println(s1);	
        StringBuffer s2 = s1.replace(2, 5, "234");
        //打印将从索引(2)开始到索引(5)之间的字符串替换成"234"后的字符串;
        System.out.println(s2);
    	}
  	}
  	
结果:
	abcdefg
	ab234fg

	Process finished with exit code 0
    
StringBuffer的反转功能:
	public StringBuffer reverse():	字符串反转
演示代码:
	public class BlogTest4 {
    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("abcdefg");
        //打印容器中存储的原字符串;
        System.out.println(s1);
        StringBuffer s2 = s1.reverse();
        //打印反转后的字符串;
        System.out.println(s2);
    	}	
    }
结果:
	abcdefg
	gfedcba

	Process finished with exit code 0

StringBuffer类的查找功能

从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
	    int indexOf (String str)  
从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
	    int indexOf (String str,int fromIndex)	
从后往前查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
   		int lastIndexOf (String str)
从指定索引处开始从后往前查找该字符串第一次出现的索引,如果找不到就返回-1     
  		int lastIndexOf (String str,int fromIndex) 
  		
案例演示:

	public class BlogTest5 {
   		public static void main(String[] args) {
        	StringBuffer s1 = new StringBuffer("abcdecfg");
        	//打印"c"第一次出现的索引;
        	System.out.println(s1.indexOf("c"));
        	//从索引(1)开始,打印c第一次出现的值
        	System.out.println(s1.indexOf("c",1));
        	//从后向前查找"c"第一次出现的索引
        	System.out.println(s1.lastIndexOf("c"));
        	//从索引(3)开始,向前查找"c"出现的索引值
        	System.out.println(s1.lastIndexOf("c", 3));
    	}
	}
结果:
	2
	2
	5
	2
	
	Process finished with exit code 0

StringBuffer类的截取功能

StringBuffer的截取功能
		public String substring(int start):			从指定位置截取到末尾
		public String substring(int start,int end):	截取从指定位置开始到结束位置,包括开始		位置,不包括结束位置
特别注意:
	 返回值类型不再是StringBuffer本身	 
案例演示:
	public class BlogTest6 {
    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("abcdefg");
        //从索引(3)截取到末尾,返回字符串,打印;
        String s2=s1.substring(3);
        System.out.println(s2);
        //从索引(2)截取到索引(4),返回字符串,打印;
        String s3 = s1.substring(2, 4);
        System.out.println(s3);
    	}
	}
结果:
	defg
	cd

	Process finished with exit code 0

StringBuffer和String的相互转换

字符串类型转换成字符串容器
String -- StringBuffer
	1.通过构造方法
	2.通过append()方法
案例:
	public class BlogTest6 {
    public static void main(String[] args) {
        //字符串"abcde"
        String s = "abcde";
        System.out.println("s: "+s);
        //通过构造方法,将字符串"abcde"存入sbuff容器里。
        StringBuffer sbuff = new StringBuffer(s);
        System.out.println("sbuff: "+sbuff);
        //通过append()方法,将字符串"abcde"存入sbuff容器里。
        StringBuffer sbuff2 = new StringBuffer();
        sbuff2.append(s);
        System.out.println("sbuff2: "+sbuff2);
    	}
	}
结果:
	s: abcde
	sbuff: abcde
	sbuff2: abcde

	Process finished with exit code 0
        
        
字符串容器转换为字符串类型        
StringBuffer -- String
	1.使用substring方法
	2.通过构造方法
	3.通过toString()方法        

案例演示:
	public class BlogTest7 {
    public static void main(String[] args) {
        StringBuffer sbuff = new StringBuffer("abcdefg");
        //使用substring方法:
        String s1=sbuff.substring(0);
        System.out.println("s1: "+s1);
        //通过构造方法
        String s2 = new String(sbuff);
        System.out.println("s2: "+s2);
        //通过toString()方法
        String s3 = sbuff.toString();
        System.out.println("s3: "+s3);
   		}
	}
结果:
	s1: abcdefg
	s2: abcdefg
	s3: abcdefg

	Process finished with exit code 0

StringBuffer类和String分别作为参数传递

形式参数问题
		String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看	 成基本数据类型数据进行传递,String类型输入值传递
		StringBuffer作为参数传递 StringBuffer是引用类型,传递的时候是传递地址值		
案例:
	 String str = "abc";
        change(str);
        System.out.println(str);//abc 
        StringBuffer sb = new StringBuffer("Hello");
        change(sb);
        System.out.println(sb);  //hellojava
    }

    private static void change(StringBuffer sb) {
        sb.append("java")
    }

    private static void change(String str) {
        str+="你好";
        System.out.println(str); //abc你好
        
 结果:
     abc
     abc你好
     hellojava
     
     Process finished with exit code 0
     

StringBuffer和StringBuilder的区别

StringBuffer  线程安全的字符序列,效率低
        StringBuilder 一个可变的字符序列,线程不安全的,效率高
        此类提供一个与 StringBuffer 兼容的 API,但不保证同步。
        该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
        如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值