javaSE__StringBuffer概述和使用

一、StringBuffer类概述

StringBuffer概述:

   stringBuffer是一个字符串的缓冲区,相当于是一个容器

StringBuffer和String的区别 :

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

二、StringBuffer类的构造方法

StringBuffer的构造方法:
   public StringBuffer():无参构造方法
   public StringBuffer(int capacity):指定容量的字符串缓冲区对象
   public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
StringBuffer的方法:
   public int capacity():返回当前容量。 理论值(不掌握)
   public int length():返回长度(字符数)。 实际值

public class StringBuffer_01 {
     
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        System.out.println(sb.length());	 //0		//容器中的字符个数,实际值
        System.out.println(sb.capacity());	 //16		//容器的初始容量,理论值

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

        StringBuffer sb3 = new StringBuffer("chen");
        System.out.println(sb3.length());		//5 	//实际字符的个数
        System.out.println(sb3.capacity());		//20	//字符串的length + 初始容量

    }
}

三、StringBuffer的添加功能

第一个方法

StringBuffer的添加功能:

   public StringBuffer append(String str):
   可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public class StringBuffer_01 {

    /**
     StringBuffer的添加功能
          public StringBuffer append(String str):
          可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

          StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组
          当调用添加的方法时,不会再重新创建对象,在不断向原缓冲区添加字符
     */
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        StringBuffer sb2 = sb.append(true);
        StringBuffer sb3 = sb.append("chen");
        StringBuffer sb4 = sb.append(100);

        //StringBuffer类中重写了toString方法,显示的是对象中的属性值
        System.out.println(sb.toString());		//truechen100
        System.out.println(sb2.toString());     //truechen100
        System.out.println(sb3.toString());     //truechen100
        System.out.println(sb4.toString());     //truechen100

    }
}

运行上面的程序我们发现,结果都是为 truechen100,原因如下:

   一、因为StringBuffer 它是一个可变的字符序列,四个引用指向的是同一个对象,操作的都是同一个对象
   二、string是不变的序列,赋完值之后,你再想对它进行赋值,原来的那个就变成了垃圾,而我们的这个StringBuffer没有变成垃圾

   我们另外说一下为什么是输出语句是:sb.toString()这个方法,其实我们直接写sb,不摇toString其实也是可以的,因为它重写了StringBuffer重写了ToString这个方法。。如果没有重写toString这个方法,那么我们输出的应该是一个地址值。

第二个方法

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

public class StringBuffer_01 {

    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("1234");
        sb.insert(3, "chen");		//在指定位置添加元素,如果没有指定位置的索引就会报索引越界异常

        System.out.println(sb);     //123chen4
    }
}

四、StringBuffer的删除功能

StringBuffer的删除功能
   一、public StringBuffer deleteCharAt(int index):
      删除指定位置的字符,并返回本身
   二、public StringBuffer delete(int start,int end):
      删除从指定位置开始指定位置结束的内容,并返回本身

public static void main(String[] args) {
		
		// 一、
        StringBuffer sb = new StringBuffer();
        sb.append("chenj");
        sb.deleteCharAt(4);			//根据索引删除掉索引位置上对应的字符
        System.out.println(sb);     //chen

		//  二、
        StringBuffer sb1 = new StringBuffer();
        sb1.append("chenjian");
        sb1.delete(0,2);    		//包含头,不包含尾
        System.out.println(sb1);    //enjian

        // ↓ 扩展内容 ↓
        //清空缓冲区
        sb1.delete(0,sb1.length());
        System.out.println(sb1);    //什么都没有,空白

        sb1 = new StringBuffer();   //不要用这种方式清空缓冲区,原来的会变成垃圾
        System.out.println(sb1);
    }

五、StringBuffer的替换和反转功能

StringBuffer的替换和反转功能

   一、public StringBuffer replace(int start,int end,String str):
     从start开始到end用str替换
   二、StringBuffer的反转功能
     public StringBuffer reverse():
     字符串反转

public static void main(String[] args) {
			
			// 一、
            StringBuffer sb = new StringBuffer("heigui");
            sb.replace(0, 3, "baa");		//替换,含头不含尾
            System.out.println(sb);          //baagui
			
			// 二、
            sb.reverse();                    //反转
            System.out.println(sb);          //iugaab
    }

六、StringBuffer的截取功能及注意事项

StringBuffer的截取功能
   一、public String substring(int start):
      从指定位置截取到末尾
   二、public String substring(int start,int end):
      截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
   注意事项
      返回值类型不再是StringBuffer本身,返回值是String

public static void main(String[] args) {
		
		// 一、
        StringBuffer sb = new StringBuffer("人在塔在,长枪依在");
        String str = sb.substring(4);         //含头不含尾
        System.out.println(str);              //,长枪依在

		//sb本身并没有改变
        System.out.println(sb);               //人在塔在,长枪依在
		
		// 二、
        String str3 = sb.substring(4, 7);     //包括开始位置,不包括结束位置
        System.out.println(str3);             //,长枪
    }

七、StringBuffer和String的相互转换

一、String →→ StringBuffer
      1、通过构造方法
      2、通过append()方法
二、 StringBuffer →→ String
      1、通过构造方法
      2、通过toString()方法
      3、通过subString(0,length);

public static void main(String[] args) {

        // 一、String --→ StringBuffer 通过构造方法将字符串转换为StringBuffer对象
        StringBuffer sb1 = new StringBuffer("chen");
        System.out.println(sb1);

        // 一、String --→ StringBuffer 通过append方法将字符串转换为StringBuffer对象
        StringBuffer sb2 = new StringBuffer();
        sb2.append("chen");
        System.out.println(sb2);

        StringBuffer sb = new StringBuffer("chen");

        //  二、StringBuffer --→ String 通过构造将StringBuffer转换为String
        String s1 = new String(sb);						
        System.out.println(s1);

        // 二、 StringBuffer --→ String 通过toString方法将StringBuffer转换为String
        String s2 = sb.toString();						
        System.out.println(s2);

        //  二、StringBuffer --→ String 通过截取子字符串将StringBuffer转换为String
        String s3 = sb.substring(0, sb.length());		
        System.out.println(s3);
    }

八、一道练习:将数组转成字符串,要求使用StringBuffer

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


public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println(arrayToString(arr));			//【1, 2, 3, 】

}
public static String arrayToString(int[] arr) {
        
        StringBuffer sb = new StringBuffer();				//创建字符串缓冲区对象
        sb.append("[");										//将[添加到缓冲区
        //{1,2,3}
        for (int i = 0; i < arr.length; i++) {				//遍历数组
            if(i == arr.length - 1) {
                sb.append(arr[i]).append("]");				//[1, 2, 3]
            }else {
                sb.append(arr[i]).append(", ");				//[1, 2,
            }
        }
        return sb.toString();
}

九、一道练习:将数组转成字符串,键盘录入"abc",输出结果:“cba”,要求使用StringBuffer

练习题:把字符串反转
				举例:键盘录入"abc"		
				输出结果:"cba"
				
			用StringBuffer的功能实现	,如下:

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);				//创建键盘录入对象
		String line = sc.nextLine();						//将键盘录入的字符串存储在line中
	    System.out.println(revString(line));
}

/*
* 将字符串反转
* 1,返回值类型String
* 2,参数列表String line
*/
public static String revString(String line) {
		StringBuffer sb = new StringBuffer(line);			//将字符串转换为StringBuffer对象
		sb.reverse();										//将缓冲区的内容反转
		return sb.toString();
}

十、String、StringBuffer和StringBuilder的区别

一、StringBuffer和StringBuilder的区别:

   * StringBuffer是jdk1.0版本的,是线程安全的,效率低 (比如一个厕所,有门)是同步的。
   * StringBuilder是jdk1.5版本的,是线程不安全的,效率高 (比如一个厕所,没有门)是不同步的。

二、String和StringBuffer,StringBuilder的区别:

   * String是一个不可变的字符序列
   * StringBuffer,StringBuilder是可变的字符序列

十一、String和StringBuffer分别作为参数传递

形式参数问题:

   String作为参数传递
   StringBuffer作为参数传递

案例演示:

   String和StringBuffer分别作为参数传递问题
   基本数据类型的值传递,不改变其值
   引用数据类型的值传递,改变其值

String类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的
例子如下:

public static void main(String[] args) {

		// ↓ String作为参数传递 ↓
		String s = "heima";
		System.out.println(s);		//heima
		change(s);
		System.out.println(s);		//heima
		
		
		System.out.println("---------------------");

		// ↓ StringBuffer作为参数传递  ↓
		StringBuffer sb = new StringBuffer();
		sb.append("heima");
		System.out.println(sb);		//heima
		change(sb);
		System.out.println(sb);		//heimaitcast
	}

	//StringBuffer作为参数传递
	public static void change(StringBuffer sb) {
		sb.append("itcast");
	}

	//String作为参数传递
	public static void change(String s) {
		s += "itcast";
	}

————————
创作不易,如觉不错,随手点赞,关注,(* ̄︶ ̄),谢谢~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值