1-java常见对象StringBuffer

13.01_常见对象(StringBuffer类的概述)

  • A:StringBuffer类概述
    • 通过JDK提供的API,查看StringBuffer类的说明
    • 线程安全的可变字符序列
  • B:StringBuffer和String的区别
    • String是一个不可变的字符序列
    • StringBuffer是一个可变的字符序列

13.02_常见对象(StringBuffer类的构造方法)

  • A:StringBuffer的构造方法:
    • public StringBuffer():无参构造方法
    • public StringBuffer(int capacity):指定容量的字符串缓冲区对象
    • public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
  • B:StringBuffer的方法:
    • public int capacity():返回当前容量。 理论值
    • public int length():返回长度(字符数)。 实际值
  • C:案例演示
    • 构造方法和长度方法的使用
 
      @Test
      public  void testInit() {

		StringBuffer sb1 = new StringBuffer();
		//容器中的字符个数,实际值
		System.out.println("--sb1.length()--"+sb1.length()); //0
		//容器的初始容量,理论值
		System.out.println("--sb1.capacity()--"+sb1.capacity());//16

		StringBuffer sb2 = new StringBuffer(10);
		System.out.println("--sb2.length()--"+sb2.length());//0
		System.out.println("--sb2.capacity()--"+sb2.capacity());//10

		StringBuffer sb3 = new StringBuffer("sb hello world");
		//实际字符的个数
		System.out.println("--sb3.length()--"+sb3.length());//14
		//字符串的length + 初始容量(16)
		System.out.println("--sb3.capacity()--"+sb3.capacity());//30
	}
<pre>
*打印结果是:
	--sb1.length()--0
	--sb1.capacity()--16
	--sb2.length()--0
	--sb2.capacity()--10
	--sb3.length()--14
	--sb3.capacity()--30
</pre>

13.03_常见对象(StringBuffer的添加功能)

  • A:StringBuffer的添加功能
    • public StringBuffer append(String str):
      • 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
    • public StringBuffer insert(int offset,String str):
      • 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
  • B.案例展示:
    • 添加方法的使用
	@Test
	public void testSBAppend_Insert(){
		StringBuffer sb1 = new StringBuffer();
		sb1.append("abc");

		System.out.println("--append--"+sb1.toString());

		StringBuffer sb2 = new StringBuffer("abc");
		//在指定位置添加元素,如果没有指定位置的索引就会报索引越界异常
		sb2.insert(1, "123");

		//StringBuffer类中重写了toString方法,显示的是对象中的属性值
		System.out.println("--insert--"+sb2.toString());
	}
 *打印结果是:
	--append--abc
	--insert--a123bc

13.04_常见对象(StringBuffer的删除功能)

  • A:StringBuffer的删除功能
    • public StringBuffer deleteCharAt(int index):
      • 删除指定位置的字符,并返回本身
    • public StringBuffer delete(int start,int end):
      • 删除从指定位置开始指定位置结束的内容,并返回本身
  • B:案例展示
    • 删除方法的使用
 
   @Test
	public void testSBDelete(){

		StringBuffer sb1 = new StringBuffer("abcde");
		//deleteCharAt(int index):根据索引删除掉索引位置上对应的字符
		//当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException
		sb1.deleteCharAt(1);
		System.out.println("--deleteCharAt--"+sb1.toString());

		StringBuffer sb2 = new StringBuffer("12345");
		//删除的时候是包含头,不包含尾
		sb2.delete(3, 4);
		System.out.println("--delete--"+sb2.toString());
		
		//清空缓冲区:
		sb2.delete(0, sb2.length());
		System.out.println("--1.清空缓冲区后--"+sb2.length());
		
		//不要用这种方式清空缓冲区,原来的会变成垃圾,浪费内存
		sb2 = new StringBuffer();
		System.out.println("--2.清空缓冲区后--"+sb2.length());

	}
  打印结果是:
  --deleteCharAt--acde
  --delete--1235

13.05_常见对象(StringBuffer的替换和反转功能)

  • A:StringBuffer的替换功能
    • public StringBuffer replace(int start,int end,String str):
      • 从start开始到end用str替换
  • B:StringBuffer的反转功能
    • public StringBuffer reverse():
      • 字符串反转
  • C:案例展示
    • 字符串替换和反转
    @Test
	public void testReplace_Reverse(){
	
		StringBuffer sb1 = new StringBuffer("abcde");
		sb1.replace(1, 3, "gggggg");
		System.out.println("--replace--"+sb1.toString());
		
		StringBuffer sb2 = new StringBuffer("12345");
		System.out.println("--reverse--"+sb2.reverse());
	}
  打印结果是:
  --replace--aggggggde
  --reverse--54321

13.06_常见对象(StringBuffer的截取功能及注意事项)

  • A:StringBuffer的截取功能
    • public String substring(int start):
      • 从指定位置截取到末尾
    • public String substring(int start,int end):
      • 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
  • B:注意事项
    • 注意:返回值类型不再是StringBuffer本身
  • C: 案例展示:
    @Test
	public void testSubstr(){
		
		StringBuffer sb1 = new StringBuffer("abcde");
		System.out.println("---substring(index)--"+sb1.substring(3));
		
		StringBuffer sb2 = new StringBuffer("abcde");
		System.out.println("--substring(int start, int end)--"+sb2.substring(2, 3));
		
	}
 打印结果是:
 ---substring(index)--de
--substring(int start, int end)--c

13.07_常见对象(StringBuffer和String的相互转换)

  • A:String -- StringBuffer

    • a:通过构造方法
    • b:通过append()方法
  • B:StringBuffer -- String

    • a:通过构造方法
    • b:通过toString()方法
    • c:通过subString(0,length);
  • C:案例展示:

    @Test
	public void testString2StringBuffer(){
		
		StringBuffer sb1 = new StringBuffer("hello world");
		System.out.println("--String调用构造方法转StringBuffer--"+sb1);
		
		StringBuffer sb2 = new StringBuffer();
		sb2.append("abcde");
		System.out.println("--String调用append方法转StringBuffer--"+sb2);
	}

    //打印结果如下:
    --String调用构造方法转StringBuffer--hello world
    --String调用append方法转StringBuffer--abcde

	
	@Test
	public void stringBuffer2String(){
		
		StringBuffer sb = new StringBuffer();
		
		String str1 = new String(sb);
		System.out.println("--StringBuffer调用构造方法转String--"+str1);
		
		String str2 = sb.toString();
		System.out.println("--StringBuffer调用toString方法转String--"+str2);
		
		String str3 = sb.substring(0, sb.length());
		System.out.println("--StringBuffer调用substring方法转String---"+str3);
	}

    //打印结果如下:
	--StringBuffer调用构造方法转String--
	--StringBuffer调用toString方法转String--
	--StringBuffer调用substring方法转String---

13.08_常见对象(把数组转成字符串)

  • A:案例演示

    • 需求:把数组中的数据按照指定个格式拼接成一个字符串
    •   举例:
        	int[] arr = {1,2,3,4};	
        输出结果:
        	"[1, 2, 3,4]"
        	
        用StringBuffer的功能实现
      

    @Test
    public void testArray2String(){

      int [] array = {1,2,3,4};
      
      System.out.println(array2String(array));
    

    }

    private static String array2String(int [] array){

      StringBuffer sb = new StringBuffer();
      sb.append("[");
      
      for(int i = 0;i<array.length;i++){
      	if(i == array.length-1){
      		 sb.append(array[i]).append("]");
      	}else{
      		sb.append(array[i]).append(", ");
      	}
      }
      return sb.toString();
    

    }

###13.09_常见对象(字符串反转) * A:案例演示 * 需求:把字符串反转 举例:键盘录入"abc" 输出结果:"cba"
	用StringBuffer的功能实现	
	   @Test
		public void testStringReverse(){
			
			System.out.println("请输入字符串");
			
			Scanner scanner = new Scanner(System.in);
			String str = scanner.nextLine();
			
			System.out.println("您输入的字符串是:"+str);		
			
			
			StringBuffer sb = new StringBuffer(str);
			System.out.println("字符串反转后是:"+sb.reverse());
	       
		}
  打印结果如下:
	请输入字符串
	abcdefg
	您输入的字符串是:abcdefg
	字符串反转后是:gfedcba

13.10_常见对象(StringBuffer和StringBuilder的区别)

  • A:StringBuilder的概述

    • 通过查看API了解一下StringBuilder类

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

  • B:面试题

    • String,StringBuffer,StringBuilder的区别

    • StringBuffer和StringBuilder的区别

    • StringBuffer是jdk1.0版本的,是线程安全的,效率低

    • StringBuilder是jdk1.5版本的,是线程不安全的,效率高

    • String和StringBuffer,StringBuilder的区别

    • String是一个不可变的字符序列

    • StringBuffer,StringBuilder是可变的字符序列

13.11_常见对象(String和StringBuffer分别作为参数传递)

  • A:形式参数问题
    • String作为参数传递
    • StringBuffer作为参数传递
  • B:案例演示
    • String和StringBuffer分别作为参数传递问题
    @Test
	public void testStrAsParams(){
		
		String s = "hello world";
		change(s);
		System.out.println(s);
		
		System.out.println("-------------------");
		StringBuffer sb = new StringBuffer("ha ha");
		change(sb);
		System.out.println(sb);
		
	}
	
	private static void change(String str){
		str += "123er";
	}
	
	private static void change(StringBuffer sb){
		sb.append("123we");
	}

posted on 2016-07-27 10:42  天涯游者  阅读(465)  评论(0)    收藏  举报

导航