java程序员从笨鸟到菜鸟之(十四)StringBuffer类

StringBuffer类

引言:
      线程(想对于进程而言)
      线程安全---->虽然同步---->但执行效率低!
      举例:银行的网站,医院的平台
      线程不安全--->不同步--->执行效率高
      举例:一些论坛网站,相亲网站.........
     在是开发中,线程不安全可能会造成死锁(备注)的现象!

说明:线程安全和执行效率是相对的,并且也是困扰开发者的因素!

从API文档来看StringBuffer类综述:

public final class StringBuffer extends Object implements Serializable, CharSequence

特点:1)线程安全的可变字符序列;

 

             2)一个类似于 String 的字符串缓冲区,但通过某些方法调用可以改变该序列的长度和内容;

 

① StringBuffer的构造方法(三种初始化方式)

       1)public StringBuffer()
             说明:构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符
       2)public StringBuffer(int capacity)
             说明:构造一个不带字符,但具有指定初始容量的字符串缓冲区
       3)public StringBuffer(String str)
             说明:构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容;该字符串的初始容量为 16 加上字符串参数的长度

 

常用的功能:
       4)public int length():获取字符串长度数

       5)public int capacity():获取当前字符串缓冲区的容量

实例1:

 

package org.westos.stringbuffer_02;

public class StringBufferDemo {
	
	public static void main(String[] args) {
	
      /* public StringBuffer()
       * 构造方法说明:构造一个其中不带字符的字符串缓冲区,其初始容量为 16个字符
       * 创建一个字符串缓冲区对象:
       * sb.length():查看字符缓冲区字符长度
       * sb.capacity():查看字符缓冲区容量(看出默认的容量)
		*/
		StringBuffer sb = new StringBuffer() ;
		System.out.println("sb.length:"+sb.length());   
		System.out.println("sb.capacity:"+sb.capacity());
		System.out.println("----------------------------");
		
		/*public StringBuffer(int capacity)
		 *构造方法说明:构造一个不带字符,但具有指定初始容量的字符串缓冲区
		 * 
		 * */
		StringBuffer sb2 = new StringBuffer(50) ;
		System.out.println("sb2.length:"+sb2.length());
		System.out.println("sb2.capacity:"+sb2.capacity());//50
		System.out.println("----------------------------");
		/* public StringBuffer(String str)
		 * 说明:构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容;
		 * 该字符串的初始容量为 16 加上字符串参数的长度
		 * */
		StringBuffer sb3 = new StringBuffer("hello") ;
		System.out.println("sb3.length:"+sb3.length());
		System.out.println("sb3.capacity:"+sb3.capacity());//默认:初始容量16 + 当前字符串长度
		
	}
}

② StringBuffer中添加功能

       1)public StringBuffer append(int/String/char/boolean/double/float....)

                          功能:当前这个方法追加,给缓冲中追加数据,返回字符串缓冲区本身(经常使用的)

                          返回值类型:StringBuffer

       2)public StringBuffer insert(int offset,String str)

                          功能:在某一个位置处(索引)去插入str这个字符串,返回字符串缓冲区本身

                          返回值类型:StringBuffer

 实例2:

 

package org.westos.stringbuffer_02;

public class StringBufferDemo2 {
	
	public static void main(String[] args) {
		
		//创建一个字符串缓冲区对象
		StringBuffer sb = new StringBuffer() ;
		
		//追加数据
		sb.append("hello") ;
		sb.append(true) ;
		sb.append(13.45) ;
		sb.append('A') ;
		sb.append(12.56F);
		System.out.println(sb);
		/* 对append说明:
		 * 只是创建了一个对象(未开辟新的对象),在原来对象的内容里添加新的内容
		 * 对print()说明:重写了Object类toString方法
		 * StringBuffer类中toString()方法
		 * 说明:将字符缓冲区转换成String类型
		 * */
		//链式编程sb.append("hello").append(true).append(13.45).append('A').append(12.56F);
		
		/*public StringBuffer insert(int offset,String str)
		 *说明:在某一个位置处去插入str这个字符串,返回字符串缓冲区本身
		 *内存情况(理解)
		 **/	
		sb.insert(5, "world") ;
		System.out.println("sb:"+sb);
	}
}

③StringBuffer的删除功能:

  1)public StringBuffer deleteCharAt(int index)
                      说明:删除指定位置处的字符,返回的是字符串缓冲区本身!
  2)public StringBuffer delete(int start,int end)
                      说明:删除从指定位置开始到指定位置结束的字符,返回的是字符串缓冲区本身!
 
实例3:

 

package org.westos.stringbuffer_02;

public class StringBufferDemo3 {
	
	public static void main(String[] args) {
		//创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer() ;
		
		//给缓冲区追加数据
		sb.append("hello") ;
		sb.append("world") ;
		sb.append("java!!") ;
		
		/*public StringBuffer deleteCharAt(int index)
		 *需求:要删除当前缓冲区中对应索引的字符
		 */
		sb.deleteCharAt(14);
		sb.deleteCharAt(14);
		System.out.println("sb:"+sb);
		/*public StringBuffer delete(int start,int end)
		 *从当前索引(star)开始,到(end-1)索引结束
		 */
		sb.delete(5, 9);//删除制定位置字符
		System.out.println("sb:"+sb);

	}
}

④StringBuffer的反转功能(重点掌握):

       public StringBuffer reverse()
           返回值类型:StringBuffer 
           功能:将此字符串中的字符序列直接反转

实例4:

package org.westos.stringbuffer_02;

import java.util.Scanner;

public class StringBufferDemo4 {
	
	public static void main(String[] args) {
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//录入并接收数据
		System.out.println("请您输入一个字符串:");
		String line = sc.nextLine() ;
		
		//可以创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer(line) ;
		/*
		 * public String toString()
		 * 说明:StirngBuffer类型的toString()方法
		 * 将StringBuffer类型转换成String类型
		 */
		String result = sb.reverse().toString() ;
		System.out.println("result:"+result);
	}
}

⑤ StringBuffer的替换功能:

public StringBuffer replace(int start, int end,String str)
        功能:从指定位置开始到指定位置(包前不包后)结束的字符用str子字符串去替代
        返回值类型:StringBuffer

 

实例5:

package org.westos.stringbuffer_02;

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

⑥StringBuffer的截取功能(得到字符串):
   1)public String substring(int start)
                      功能:从指定位置默认截取到末尾,返回值是一个新的字符串
                      返回值类型:String
   2)public String substring(int start,int end)
                      功能:从指定位置开始截取到指定位置结束,包前不包后,返回一个新的字符串
                      返回值类型:String
实例6:

package org.westos.stringbuffer_02;

public class StringBufferDemo6 {
	
	public static void main(String[] args) {
		//创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer() ;
		
		//添加
		sb.append("hello") ;
		sb.append("world") ;
		sb.append("java") ;
		//截取形成新的字符串(创建了一个新的对象)		
	    String s1 = sb.substring(5) ;
		System.out.println("s1:"+s1);
		//此时字符串缓冲区内容(可以看到上述操作并未对缓冲区内容进行操作,原因?)
		System.out.println("sb:"+sb);
		//截取形成新的字符串(创建了一个新的对象)
		String s2 = sb.substring(5,10) ;
		System.out.println("s2:"+s2);
		//此时字符串缓冲区内容(可以看到上述操作并未对缓冲区内容进行操作)
		System.out.println("sb:"+sb);
	}
}

未完待续...............
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值