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); }}扩展(面试题)

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

你在会议中吵架时,尼泊尔的背包客一起端起酒杯坐在火堆旁。

Java难点 | StringBuilder类/StringBuffer类

相关文章:

你感兴趣的文章:

标签云: