12.Java面向对象-StringBuffer(类)、StringBuilder(类)、StringJoiner(类)

12.Java面向对象-StringBuffer(类)、StringBuilder(类)、StringJoiner(类)

一、StringBuffer类的概述

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

二、StringBuffer类的构造方法

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

/*A:StringBuffer的构造方法:
public StringBuffer():				无参构造方法
public StringBuffer(int capacity):	指定容量的字符串缓冲区对象
public StringBuffer(String str):		指定字符串内容的字符串缓冲区对象
        B:StringBuffer的方法:
public int capacity():返回当前容量。	理论值
public int length():返回长度(字符数)。 实际值
        C:案例演示
        构造方法和长度方法的使用*/
public class Test1 {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer(); //默认容量是16 超过还是能够存储
        System.out.println(stringBuffer); //  ""
        StringBuffer stringBuffer1 = new StringBuffer(22);
        System.out.println(stringBuffer1); // ""
        StringBuffer stringBuffer3 = new StringBuffer("abc");
        System.out.println(stringBuffer3); // "abc"
        System.out.println(stringBuffer3.capacity()); //19
        System.out.println(stringBuffer3.length()); //3
        stringBuffer.append("abcdefg000000000000000000");
        System.out.println(stringBuffer.capacity()); //34
        System.out.println(stringBuffer.length()); //25
        System.out.println(stringBuffer);
    }
}

三、StringBuffer的添加功能

A:StringBuffer的添加功能
	public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
	public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
B:案例演示
	StringBuffer的添加功能
package org.westos.java12;
/*A:StringBuffer的添加功能
public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
        B:案例演示
        StringBuffer的添加功能*/
public class Test2 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("abcdfjksjlaf");
        String s = sb.toString();
        System.out.println(s);
        System.out.println(sb.insert(2, '我').toString());
        System.out.println(sb.insert(0, '我'));
    }
}

四、StringBuffer的删除功能

A:StringBuffer的删除功能
	public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
	public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
B:案例演示
	StringBuffer的删除功能
package org.westos.java12;
/*A:StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
        B:案例演示
        StringBuffer的删除功能*/
public class Test2 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("ajskf我爱你lsalkdf");
        //System.out.println(sb.deleteCharAt(5).toString());
        System.out.println(sb.delete(5, 8));//含头不含尾
    }
}

五、StringBuffer的替换和反转功能

A:StringBuffer的替换功能
	public StringBuffer replace(int start,int end,String str):	从start开始到end用str替换
B:StringBuffer的反转功能
	public StringBuffer reverse():字符串反转
C:案例演示
	StringBuffer的替换和反转功能
D:从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
  int indexOf (String str)  
  从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
  int indexOf (String str,int fromIndex)	
  从后往前找
  int lastIndexOf (String str)
  int lastIndexOf (String str,int fromIndex) 
package org.westos.java12;
/*A:StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str):	从start开始到end用str替换
        B:StringBuffer的反转功能
public StringBuffer reverse():字符串反转
        C:案例演示
        StringBuffer的替换和反转功能*/
public class Test2 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("ab我爱你");
        System.out.println(sb.replace(2, 2, "我"));//ab我我爱你 含头不含尾
        System.out.println(sb.replace(2, 3, "你你你"));//ab你你你我爱你 含头不含尾
        System.out.println(sb.delete(0, sb.length())); // ""
        System.out.println(sb.append("abc")); // abc
        System.out.println(sb.reverse()); // cba
    }
}
package org.westos.java12;
/*D:从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
        int indexOf (String str)
        从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
        int indexOf (String str,int fromIndex)
        从后往前找
        int lastIndexOf (String str)
        int lastIndexOf (String str,int fromIndex)*/
public class Test2 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("abjavajavajdfksjava");
        System.out.println(sb.indexOf("javas")); //找不到就返回-1
        System.out.println(sb.indexOf("java")); //2
        System.out.println(sb.indexOf("java", sb.indexOf("java")+1)); //6
        System.out.println(sb.lastIndexOf("java")); //15
        System.out.println(sb.lastIndexOf("java", sb.lastIndexOf("java")-1)); //6
    }
}

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

A:StringBuffer的截取功能
	public String substring(int start):	从指定位置截取到末尾
	public String substring(int start,int end):	截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
B:注意事项
	注意:返回值类型不再是StringBuffer本身
C:案例演示
	StringBuffer的截取功能及注意事项
package org.westos.java12;
/*A:StringBuffer的截取功能
public String substring(int start):	从指定位置截取到末尾
public String substring(int start,int end):	截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
        B:注意事项
        注意:返回值类型不再是StringBuffer本身
        C:案例演示
        StringBuffer的截取功能及注意事项*/
public class Test2 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("abjavajavajdfksjava");
        String substring = sb.substring(2);
        System.out.println(substring); //返回的不再是StringBuffer本身,而是String类型  // javajavajdfksjava
        System.out.println(sb); //abjavajavajdfksjava
        System.out.println(sb.substring(2, 6)); //java
        System.out.println(sb); //abjavajavajdfksjava
    }
}

七、StringBuffer和String的相互转换

A:String -- StringBuffer
	a:通过构造方法
	b:通过append()方法
	c:通过insert()方法
B:StringBuffer -- String
	a: 使用substring方法
	b:通过构造方法
	c:通过toString()方法
C:案例演示
	StringBuffer和String的相互转换
package org.westos.java12;
/*A:String -- StringBuffer
        a:通过构造方法
        b:通过append()方法
        c:通过insert()方法
        B:StringBuffer -- String
        a: 使用substring方法
        b:通过构造方法
        c:通过toString()方法
        C:案例演示
        StringBuffer和String的相互转换*/
public class Test2 {
    public static void main(String[] args) {
        //String -- StringBuffer
        StringBuffer stringBuffer = new StringBuffer("abc"); //abc
        stringBuffer.append("abc"); //abcabc
        stringBuffer.insert(0,'a'); //aabcabc
        //StringBuffer -- String
        String s = stringBuffer.toString(); //aabcabc
        System.out.println(s);
        String substring = stringBuffer.substring(2); //bcabc
        System.out.println(substring);
        String s1 = new String(stringBuffer); //aabcabc
        System.out.println(s1);
    }
}

八、把数组转成字符串及字符串反转

package org.westos.java12;

/*A:案例演示
        需求:把数组中的数据按照指定个格式拼接成一个字符串
        举例:
        int[] arr = {1,2,3};
        输出结果:
        "[1, 2, 3]"
        用StringBuffer的功能实现*/
public class Test3 {
    public static void main(String[] args) {
        int[] arr={1,2,3};
        StringBuffer stringBuffer = new StringBuffer("[");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                stringBuffer.append(arr[i]+"]");
            }else{
                stringBuffer.append(arr[i]+",");
            }
        }
        System.out.println(stringBuffer.toString());
    }
}

package org.westos.java12;

/*A:案例演示
        需求:把数组中的数据按照指定个格式拼接成一个字符串
        举例:
        int[] arr = {1,2,3};
        输出结果:
        "[1, 2, 3]"
        用StringBuffer的功能实现*/
public class Test3 {
    public static void main(String[] args) {
        int[] arr={1,2,3};
        StringBuffer stringBuffer = new StringBuffer("[");
       /* StringBuffer append = stringBuffer.append("==");
        System.out.println(append==stringBuffer); //true 返回容器本身*/
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                stringBuffer.append(arr[i]).append(']');
            }else{
                stringBuffer.append(arr[i]).append(',');
            }
        }
        System.out.println(stringBuffer.toString());
    }
}
package org.westos.java12;

import java.util.Scanner;

/*A:案例演示
        需求:把字符串反转
        举例:键盘录入"abc"
        输出结果:"cba"
        用StringBuffer的功能实现*/
public class Test4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符");
        StringBuffer stringBuffer = new StringBuffer(scanner.nextLine());
        System.out.println(stringBuffer.reverse().toString());
    }
}

九、StringBuffer和StringBuilder的区别

A:StringBuilder的概述
	通过查看API了解一下StringBuilder类
B:面试题
	String,StringBuffer,StringBuilder的区别

// StringBuffer 线程安全的长度可变字符容器,线程安全的效率低
// StringBuilder 线程不安全的长度可变字符容器,线程不安全效率高

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

A:形式参数问题
	String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递,String类型输入值传递
	StringBuffer作为参数传递 
B:案例演示
	String和StringBuffer分别作为参数传递问题
package org.westos.java12;

public class MyTest {
    public static void main(String[] args) {
        //引用类型,作为参数传递,形参的改变会影响实参。
        //基本类型作为参数传递,形参的改变,不影响实参。
        //字符串虽说是引用类型,但是他作为参数传递,属于值传递,跟基本数据类型一致。
        String str="abc";
        test(str);
        System.out.println(str);  //2."abc"
        StringBuilder sb = new StringBuilder("呵呵呵");
        test(sb);
        System.out.println(sb.toString()); //3.321呵呵呵
    }

    private static void test(StringBuilder sb) {
        sb.append("123");
        sb.reverse();
    }

    private static void test(String str) {
        str+="哈哈哈";
        System.out.println(str); //1."abc哈哈哈"
    }
}

十一、补充:StringJoiner

StringJoiner(CharSequence delimiter) 
构建了一个字符容器,指定分隔符 
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 
构建了一个字符容器,指定分隔符,前缀,后缀

StringJoiner add(CharSequence newElement) 
增加了一份给 CharSequence值的 StringJoiner价值的下一个元素。  
int length() 
返回该 StringJoiner的 String表示长度。 

String toString()  把容器中的数据以字符串返回
package org.westos.java12;

import java.util.StringJoiner;

/*StringJoiner(CharSequence delimiter)
        构建了一个字符容器,指定分隔符
        StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
        构建了一个字符容器,指定分隔符,前缀,后缀

        StringJoiner add(CharSequence newElement)
        增加了一份给 CharSequence值的 StringJoiner价值的下一个元素。
        int length()
        返回该 StringJoiner的 String表示长度。

        String toString()  把容器中的数据以字符串返回*/
public class Test6 {
    public static void main(String[] args) {
        StringJoiner stringJoiner = new StringJoiner(",","[","]"); //CharSequence类型
//      StringJoiner stringJoiner = new StringJoiner(",");
        int[] arr={1,2,3};
        for (int i = 0; i < arr.length; i++) {
            stringJoiner.add(String.valueOf(arr[i])); //CharSequence类型
        }
        System.out.println(stringJoiner.toString()); // [1,2,3] -- 1,2,3
        System.out.println(stringJoiner.length());// 7 -- 5
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值