java常用类---StringBuffer和StringBuilder

1.StringBuffer

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题。线程安全的可变字符序列
StringBuffer和String的区别 :
String : 一旦定义,这个内容和长度就固定了。String 是一个长度不可变得字符序列
Java 给我们提供了一个类 StringBuffer 这个类是一个长度可变得字符序列容器,那么使用他进行拼串,比你用+=去拼接要好

public class MyTest {
    public static void main(String[] args) {
        //String : 一旦定义,这个内容和长度就固定了。String 是一个长度不可变得字符序列
        String str="abc";
        /*
        str+="ccc";
        str+="ddd";
        str+="eee";
        System.out.println(str);

         */

        //Java 给我们提供了一个类 StringBuffer 这个类是一个长度可变得字符序列容器,那么使用他进行拼串,比你用+=去拼接要好
        //可变字符序列通过某些方法调用可以改变该序列的长度和内容。

      /*  构造方法摘要
        StringBuffer()
        构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。*/
      //StringBuffer 是一个长度和内容可变得字符容器
        StringBuffer sb = new StringBuffer();


     /*   StringBuffer( int capacity)
        构造一个不带字符,但具有指定初始容量的字符串缓冲区。*/
        StringBuffer sb2 = new StringBuffer(100);

       //当你超过容量后,会自动扩容
        int capacity = sb.capacity(); //获取容量
        System.out.println(capacity);//16
        int length = sb.length(); //获取长度

        int capacity1 = sb2.capacity();
        System.out.println(capacity1);

        int length1 = sb2.length();
        System.out.println(length);
        System.out.println(length1);


    }
}

2.StringBuffer类的构造方法

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

3.StringBuffer的添加功能

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

4.StringBuffer的删除功能

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

5.StringBuffer的替换和反转功能

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

6.StringBuffer的截取功能及注意事项

  • A:StringBuffer的截取功能
    public String substring(int start): 从指定位置截取到末尾
    public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
  • B:注意事项
    注意:返回值类型不再是StringBuffer本身
public class MyTest {
    public static void main(String[] args) {
        StringBuffer sb= new StringBuffer("abc");
        sb.append("bbb").append("ddd");
        //在指定索引处插入内容,返回值还是原来得容器
        StringBuffer ss = sb.insert(2, "eee");
        ss.append(200);
        String string = sb.toString();
        System.out.println(string);

        //根据索引删除容器中某个字符 返回还是原来得容器
        StringBuffer stringBuffer = sb.deleteCharAt(0);

        String string2 = sb.toString();
        System.out.println(string2);

        //根据起始索引和终止索引删除一段
        StringBuffer delete = sb.delete(5, 7+1); //含头不含尾
        System.out.println(delete);

        //替换,把起始索引到终止索引中间得内容,替换成一个新的内容 返回得还是容器本身
        StringBuffer buffer = sb.replace(0, 3, "我爱你");
        System.out.println(buffer);
        //反转容器中得内容,返回得还是容器本身
        StringBuffer reverse = sb.reverse();
        System.out.println(reverse);
       // sb.indexOf()
        // sb.lastIndexOf()
        String s = sb.substring(sb.indexOf("你"),sb.lastIndexOf("爱")+1);
        System.out.println(s);


    }
}

7.StringBuffer和String的相互转换

  • A:String -- StringBuffer
    a:通过构造方法
    b:通过append()方法
  • B:StringBuffer -- String
    a: 使用substring方法
    b:通过构造方法
    c:通过toString()方法
public class MyTest2 {
    public static void main(String[] args) {
        //String -----StringBuffer
        String str="abc";
        //方式1
        StringBuffer sb = new StringBuffer(str);
        //方式2
        StringBuffer sb2 = new StringBuffer().append(str);


        //StringBuffer----String

        StringBuffer sb3 = new StringBuffer("sbc");
        //方式1
        String string = sb3.toString();
        //方式2
        String substring = sb3.substring(0);
        //方式3
       /* String(StringBuffer buffer)
        分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。*/
        String s = new String(sb3);

        String str2="asdfasdfasdfasdEfasdeasdfeasadfeeaf";

    }
}

8.把数组转成字符串

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

        String string = sb.toString();
        System.out.println(string);
    }
}

9.字符串反转

public class MyTest {
    public static void main(String[] args) {
        //创建缓冲区对象
        StringBuffer buffer = new StringBuffer();
        //添加数据
        buffer.append("abc");
        buffer.reverse();
        System.out.println(buffer);
    }
}

10.StringBuffer和StringBuilder的区别

public class MyTest4 {
    public static void main(String[] args) {
        //StringBuffer和StringBuilder得区别
        //StringBuffer 线程安全得效率低
        //StringBuilder 线程安全效率高
        //里面得方法一摸一样
        StringBuffer stringBuffer = new StringBuffer();
        StringBuilder stringBuilder = new StringBuilder();
    }
}

11.String和StringBuffer分别作为参数传递

  • 形式参数问题
    String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递
    StringBuffer作为参数传递
public class MyTest5 {
    public static void main(String[] args) {
        //基本类型作为参数传递:值传递,形参得改变不影响实参 String 他符合值传递得特点
        //引用类型传递:引用传递,形参得改变会影响实参
        String str="hello";
        test(str);
        System.out.println(str); //hello
        StringBuilder sb = new StringBuilder("哈哈");
        test(sb);
        System.out.println(sb); // 呵呵哈哈
    }

    private static void test(StringBuilder sb) {
        sb.append("呵呵").reverse();
        System.out.println(sb.toString()); //呵呵哈哈
    }

    private static void test(String s) {
        s+="world";  //hellowrod
        System.out.println(s);//hellword   1
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值