重学java 31.API 2.StringBuilder

总有一天,我不再畏惧任何人的离开                                       

                                                 —— 24.5.8

StringBuilder的介绍

1.概述

        一个可变的字符序列,此类提供了一个与StringBuffer兼容的一套API,但是不保证同步(线程不安全,效率高

2.作用

        主要是拼接字符串

3.问题

        a、String也能字符串拼接,直接使用“+”即可,为何还要用StringBuilder去拼接呢?

        b、原因:

                String每拼接一次,就会产生新的字符串对象,就会在堆内存中开辟新的空间,如果拼接次数多了,会占用内存,效率比较低

                StringBuilder,底层自带一个缓冲区(没有被final修饰的byte数组),拼接字符串之后都会在此缓冲区中保存,在拼接的过程中,不会产生新对象,节省内存

4.特点

        a、底层自带缓冲区,此缓冲区没有被final修饰的byte数组,默认长度为16

        b、如果超出了数组长度,数组会自动扩容

                创建一个新长度的新数组,将老数组的元素复制到新数组中,然后将新数组的地址值重新赋值给老数组

        c、默认每次扩容老数组的2倍+2

                如果一次性添加的数据超出了默认的扩容数组长度(2倍+2),比如存了36个字符,超出了第一次扩容的34,就按照实际数据个数为准,以36扩容,小于等于按默认,大于按实际

5.示例:

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("111");
        sb.append("11111111111111111111111111111111111111");
        for (int i = 0; i < sb.length(); i++) {
            System.out.println(sb.charAt(i));
            System.out.println("这是第"+i+"次输出");
        }
    }

StringBuilder的使用

1.构造

        StringBuilder()

        StringBuilder(String str)

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        System.out.println(sb);

        StringBuilder sb1 = new StringBuilder("abc");
        System.out.println(sb1);
    }

2.常用方法:

StringBuilder append(任意类型数据) —> 字符串拼接,返回的是StringBuilder自己

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder("张晓明");
        System.out.println(sb);
        System.out.println(sb1);
        System.out.println(sb1==sb);

        System.out.println("——————————————————————————");
        // 链式调用
        StringBuilder sb2 = new StringBuilder();
        sb2 = sb.append("赵敏").append("周芷若").append("小昭");
        System.out.println(sb);
        System.out.println(sb2==sb);    //true
    }

StringBuilder reverse()->字符串翻转,返回的是StringBuilder自己

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder("张晓明");
        System.out.println(sb);
        System.out.println(sb1);
        System.out.println(sb1==sb);

        System.out.println("——————————————————————————");
        // 链式调用
        StringBuilder sb2 = new StringBuilder();
        // 字符串添加
        sb2 = sb.append("赵敏").append("周芷若").append("小昭");
        System.out.println(sb);
        System.out.println(sb2==sb);    //true

        System.out.println("——————————————————————————");
        // 字符串翻转
        sb.reverse();
        System.out.println(sb);
    }

String tostring() —> 将StringBuilder转成String —> 用StringBuilder拼接字符串是为了效率,为了不占内存,那么拼完之后我们后续可能会对拼接好的字符串进行处理,就需要调用String中的方法,所以需要将StringBuilder转为String

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder("张晓明");
        System.out.println(sb);
        System.out.println(sb1);
        System.out.println(sb1==sb);

        System.out.println("——————————————————————————");
        // 链式调用
        StringBuilder sb2 = new StringBuilder();
        // 字符串添加
        sb2 = sb.append("赵敏").append("周芷若").append("小昭");
        System.out.println(sb);
        System.out.println(sb2==sb);    //true

        System.out.println("——————————————————————————");
        // 字符串翻转
        sb.reverse();
        System.out.println(sb);

        System.out.println("——————————————————————————");
        // 可变字符串转定长字符串
        String s = sb.toString();
        System.out.println(s);
    }

3.练习

        练习1:

                键盘录入一个字符串,判断此字符串是否为"回文内容"

    public static void main(String[] args) {
//        1.创建Scanner对象
        Scanner sc = new Scanner(System.in);
        String data = sc.next();
//        2.创建StringBuilder对象
        StringBuilder sb = new StringBuilder(data);
//        3.reverse 字符串翻转
        sb.reverse();
//        4.将StringBuilder转为String,将可变字符串转为不可变字符串
        String s = sb.toString();
//        5.判断
        if (data.equals(s)){
            System.out.println("是回文内容");
        }else{
            System.out.println("不是回文内容");
        }
    }

        练习2

                定义一个数组,以[元素1,元素2,元素3..]的形式输出,用stringBuilder拼接

    // 定义一个数组,以[元素1,元素2,元素3..]的形式输出,用stringBuilder拼接
    public static void main(String[] args) {
        // 1.创建可变字符串
        StringBuilder sb = new StringBuilder();
        // 2.从键盘输入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入拼接的字符串");
        // 3.可变字符串接收输入的字符串
        sb.append(sc.nextLine());
        // 将可变字符串转变为字符串,然后去除空格
        String sb1 = sb.toString().replace(" ","");
        char[] arr = new char[sb1.length()];
        for (int i = 0; i < sb1.length(); i++) {
            arr[i] = sb1.charAt(i);
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.print("]");
    }

String:拼接字符串效率低,每拼接一次,都会产生一个新的字符串对象,耗费内存资源StringBuilderStringBuffer区别:
        a.相同点:
                用法一样,作用一样
        b.不同点:

                StringBuilder:拼接效率比StringBuffer高
                                    线程不安全
                StringBuffer:效率比较低,线程安全
                拼接效率:StringBuilder>StringBuffer>String

总结

String

1.概述

        代表的是字符串

2.特点

        a.凡是带双引号的,都是String的对象
        b.字符串是常量,他们的值在创建之后不能被更改
        c.srring对象是不可变的,所以可以共享

3.创建

        a.String0
        b.String(String s)
        c.sring(char[] chars)
        d.string(bytell bytes)

        e.string(char0] chars,int offset,int count)
                chars代表被转的数组
                ofset代表从数组的哪个索引开始转
                count代表转多少个

        f.String(bytel] bytes,int offset,int count)
                bytes代表被转的数组
                offset代表从数组的哪个素引开始转

                count代表转多少个

4.方法

a.判断方法

        ① boolean equals(Object obj) -- 判断字符串内容是否一样

        ② boolean equalslgnoreCase(Strings) -- 判断字符串内容是否一样,忽略大小写

b.获取方法

        ① int length() -- 获取字符串长度
        ② Slring concal(slring s)-- 拼接字符串,返回新串
        ③ char charAt(int index)-- 根据索引获取对应的字符
        ④ int indexOfstrings) -- 获取指定字符在字符串中第一次出现的素引位置
        ⑤ String subString(int beginIndex) -- 从beginIndex开始截取字符串到最后
        ⑥ String substring(int beginindex,int endindex) -- 从beginIndex到endIndex截取字符串,含头不含尾

c.转换方法

        ① char[] toCharArray() -- 将字符串转成char数组

        ② byte[] getBytes0 -- 将字符串转成byte数组
        ③ bytell getBytes(Sting charsetName) -- 按照指定的编码规则将字符串转成byte数组

        ④ String replace(c1,c2) -- 将c1替换成c2

d.分割方法

        ① String[] split(string regex) -- 按照指定规则分割字符串

e.其他方法

        ① boolean contains(String s) -- 判断字符串是否包含指定的字符串内容
        ② boolean endsWith(string s) -- 判断字符串是否以指定的串儿结尾

        ③ boolean startsWith(String s) -- 判断字符串是否以指定的串儿开头
        ④ String toLowerCase() -- 将字母转成小写
        ⑤ String toUpperCase() -- 将字母转成大写
        ⑥ String trim() -- 去掉字符串两端空格

StringBuilder

1.概述

        可变的字符序列

2.特点

        自带缓冲区,拼接字符串不会随意产生新对象!

3.常用方法

        a.StringBuilder append(任意类型)- 字符串拼接,返回自己

        b.StringBuilder reverse0 -- 字符串内容翻转,返回自己
        c.String toString() -- 将StringBuilder转成String

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值