StringBuffer类

StringBuffer

1,StringBuffer类的概述,构造方法

StringBuffer类概述
	我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。
	而StringBuffer就可以解决这个问题
StringBuffer 线程安全的可变字符序列

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

案例:构造方法和长度方法的使用

public class Test {
    public static void main(String[] args) {
        // 我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。
        //如果我们要进行拼串的操作,推荐使用StringBuffer
        // StringBuffer 长度可变的字符序列,可以看作一个容器,不断地可以往里添加数据

        //StringBuffer类的无参构造方法
        //构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
        StringBuffer stringBuffer = new StringBuffer();
        //获取容量
        int c=stringBuffer.capacity();
        System.out.println(c);//16
        //获取长度
        int l=stringBuffer.length();
        System.out.println(l);//0
        //水杯:额定容量 500ML 空杯子 capacity()
        //往水杯中装水 实际装了100ML length()

        //往字符串缓冲区中添加内容 如果超过了默认的容量,会自动扩充
    }
}

2,StringBuffer的功能

StringBuffer的添加功能-----
	public StringBuffer append(String str):			可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
	public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
StringBuffer的删除功能--------
	public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
	public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
StringBuffer的替换功能---------
	public StringBuffer replace(int start,int end,String str):	从start开始到end用str替换
StringBuffer的反转功能------
	public StringBuffer reverse()  反转字符串
StringBuffer的查找功能--------
int indexOf (String str)
从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
int indexOf (String str,int fromIndex)  
从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
从后往前找
   int lastIndexOf 
StringBuffer的截取功能-------
	public String substring(int start):			从指定位置截取到末尾
	public String substring(int start,int end):	截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意事项
	注意:返回值类型不再是StringBuffer本身,截取后不影响容器本身  
        

案例:StringBuffer功能的使用

public class Test2 {
    public static void main(String[] args) {
        //StringBuffer的添加功能
        //public StringBuffer append(String str) 可以把任何类型的数据添加到字符串缓冲区里,并返回字符串缓冲区本身
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(3).append(3.5).append("hao").append('c');
        System.out.println(stringBuffer.toString());

        //public StringBuffer insert(int offset,String str) 在指定位置把任意类型的数据插入到字符串缓冲区里面
        StringBuffer stringBuffer1 = new StringBuffer("肉蛋葱鸡");
        stringBuffer1.insert(1,"好");//在指定索引的前面插入
        System.out.println(stringBuffer1.toString());

        //StringBuffer的删除功能
        //public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
        stringBuffer1.deleteCharAt(1);
        System.out.println(stringBuffer1);//肉蛋葱鸡
        //public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
        //含头不含尾
        stringBuffer1.delete(1,3);//肉鸡
        System.out.println(stringBuffer1.toString());

        //StringBuffer的替换和反转功能
        //public StringBuffer replace(int start,int end,String str) 根据起始索引和终止索引,替换一段内容
        //含头不含尾
        StringBuffer stringBuffer2 = new StringBuffer("aaabbbccc");
        stringBuffer2.replace(0,6,"eee");
        System.out.println(stringBuffer2);
        //public StringBuffer reverse()  反转字符串缓冲区中的元素
        stringBuffer2.reverse();
        System.out.println(stringBuffer2);

        //StringBuffer的截取功能
        //public String substring(int start)  从指定位置开始截取到末尾,返回的是截取到的字符串
        StringBuffer stringBuffer3 = new StringBuffer("AAABBBCCC");
        String s=stringBuffer3.substring(1);
        System.out.println(s);
        //public String substring(int start,int end):	截取从指定位置开始到结束位置
        String s1=stringBuffer3.substring(1,3);
        System.out.println(s1);

        //StringBuffer的查找功能
        //int indexOf (String str)  从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
        // int indexOf (String str,int fromIndex) 从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
        //int lastIndexOf 从后往前查找
        StringBuffer stringBuffer4 = new StringBuffer("123456");
        int n=stringBuffer4.indexOf("2");
        System.out.println(n);
        int n1=stringBuffer4.indexOf("4",2);
        System.out.println(n1);

    }
}

3,StringBuffer和String的相互转换

String -- StringBuffer
	a:通过构造方法
	b:通过append()方法
StringBuffer -- String
	a: 使用substring方法
	b:通过构造方法
	c:通过toString()方法

案例:StringBuffer和String的相互转换

public class Test {
    public static void main(String[] args) {
        //StringBuffer类型和String类型的相互转换
        StringBuffer stringBuffer = new StringBuffer("abcde");
        // StringBuffer------>String
        //方式一 toString()方法
        String s=stringBuffer.toString();
        System.out.println(s);
        //方式二 substring方法
        String s1=stringBuffer.substring(0);
        System.out.println(s1);
        //方式三 可以采用String类中的构造方法 String(StringBuffer buffer)
        String ss=new String(stringBuffer);
        System.out.println(ss);

        //Stirng----->StringBuffer
        //方式1:StringBuffer的构造方法
        String r="abc";
        StringBuffer stringBuffer1 = new StringBuffer(r);
        //方式二 append() insert()方法
        StringBuffer buffer = new StringBuffer();
        buffer.append(r);
        buffer.insert(2,r);
    }
}

4,StringBuffer和StringBuilder的区别

StringBuilder的概述
	通过查看API了解一下StringBuilder类
面试题
	String,StringBuffer,StringBuilder的区别
 //他们两个的API是相同的。
 //区别是:线程安全方面的区别
 //StringBuffer是线程安全的,效率低
 //StringBuilder 线程不安全的,效率高。多线程环境下,可能会存在线程安全问题

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

5,String和StringBuffer分别作为参数传递

形式参数问题
	String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递,String类型属于值传递
	StringBuffer作为参数传递 形参的改变会影响实参;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值