写点什么

Java 难点 | StringBuilder 类 /StringBuffer 类

作者:几分醉意.
  • 2022-10-29
    安徽
  • 本文字数:2304 字

    阅读完需:约 8 分钟

Java难点 | StringBuilder类/StringBuffer类

StringBuilder 类/StringBuffer 类


stringBuffer/strinaBuilder 可以看做可变长度字符串。stringBuffer/stringBuilder 初始化容量 16.stringBuffer/stringBuilder 是完成字符串拼接操作的,方法名:appendstringBuffer 是线程安全的。stringBuilder 是非线程安全的。频繁进行字符串拼接不建议使用"+"

StringBuilde 构造方法


public static void main(String[] args) {        // 空参数构造        StringBuilder bu1 = new StringBuilder();        System.out.println("bu1:"+bu1); //bu1:""  默认空字符串
// 带字符串的构造方法 StringBuilder bu2 = new StringBuilder("abc"); System.out.println("bu2:"+bu2); //bu2:abc
//指定初始化容量的StringBuilder对象(字符串缓冲区对象) //如何优化性能? 在创建对象的时候尽可能给定一个初始化容量, //因为初始化容量是16,append方法底层在追加的时候,如果byte数组满了,会自动扩容 //所以最好减少底层数组的扩容次数,预估计一下,给一个大一些的初始化容量 //关键点:给定一个合适的初始化容量,可以提高程序的执行效率 StringBuilder bu3 = new StringBuilder(100);

}
复制代码

append 方法

public StringBuilder append (...): 添加任意类型的字符串样式,并返回当前对象自身


public static void main(String[] args) {        /*            StringBuilder的常用方法:            public StringBuilder append (...): 添加任意类型的字符串样式,并返回当前对象自身         */
// 创建StringBuilder对象 StringBuilder bu = new StringBuilder(); //使用append方法往StringBuilder中添加数据 //append方法返回值是this,调用方法的对象bu this==bu StringBuilder bu2 = bu.append("abc"); //把bu的地址赋值给bu2 System.out.println(bu); //"abc" System.out.println(bu2); //"abc" System.out.println(bu==bu2); // 引用类型比较的是地址 ture
//使用append方法无需接收返回值 //它里面可以添加任意内容 bu.append("abc"); bu.append(1); bu.append(true); bu.append(8.8); bu.append('中'); System.out.println(bu); //abcabc1true8.8中 前面一个abc是上面的
/* 链式编程:方法返回值是一个对象,可以继续调用方法 */ //它返回的还是StringBuilder对象,所以可以继续调用这个对象的方法 bu.append("abc").append(1).append(true).append(8.8).append('中');
}
复制代码

toString 方法

public String toString(): 将当前 StringBuilder 对象转换为 String 对象


public static void main(String[] args) {        //String->StringBuilder        String str = "hello";        System.out.println("str:"+str); //str:hello        StringBuilder bu = new StringBuilder("str");        //往StringBuilder中添加数据        bu.append("world");        System.out.println(bu); //strworld
//StringBuilder->String String s = bu.toString(); System.out.println("s:"+s); //s:strworld }
复制代码

StringBuilder 和 StringBuffer 的区别

StringBuilder 和 StringBuffer 构造方法和 append、toString 方法使用方式都是一样的,那么他们的区别是什么呢?


StringBuffer 中的方法都有:synchronized 关键字修饰。表示 StringBuffer 在多线程环境下运行是安全的。StringBuilder 中的方法都没有:synchronized 关键字修饰,表示 5tringBuilder 在多线程环境下运行是不安全的。StringBuffer 是线程安全的。 StringBuilder 是非线程安全的。

练习一


public class 按指定格式拼接字符串 {    public static void main(String[] args) {        int [] aa={1,2,3};        String bb = bb(aa);        System.out.println(bb);    }    public static String bb(int[] aa){        String str = "[";        for (int i = 0; i < aa.length; i++) {            if (i==aa.length-1){                str+="word"+aa[i]+']';            }else {                str+="word"+aa[i]+"#";            }        }        return str;    }}
复制代码

练习二


public class 统计输入字符串中各种字符的个数 {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        System.out.println("请输入一个字符串:");        String next = sc.next();
int aa =0; //大写字母 int bb =0; //小写字母 int cc =0; //数字 int dd =0; //其他
char[] chars = next.toCharArray(); for (int i = 0; i < chars.length; i++) { char ch = chars[i]; //当前单个字符 if ('A'<=ch && ch<='Z'){ aa++; }else if ('a'<=ch && ch<='z'){ bb++; }else if ('0'<=ch && ch<='9'){ cc++; }else { dd++; } } System.out.println("大写字母有:"+aa); System.out.println("小写字母有:"+bb); System.out.println("数字有:"+cc); System.out.println("其他字符有:"+dd);
}}
复制代码

扩展(面试题)


第一句“我看过源代码”要说,提高逼格,增加工资,嘿嘿嘿,本期到此结束,我们下期再见!

发布于: 刚刚阅读数: 2
用户头像

几分醉意.

关注

还未添加个人签名 2022-10-22 加入

还未添加个人简介

评论

发布
暂无评论
Java难点 | StringBuilder类/StringBuffer类_Java_几分醉意._InfoQ写作社区