【學習筆記】String進階:StringBuffer類(線程安全)和StringBuilder類
一、除了使用String類存儲字符串之外,還可以使用StringBuffer類存儲字符串。而且它是比String類更高效的存儲字符串的一種引用數據類型。
優點:
對字符串進行連接操作時,使用StringBuffer類可以大大提高程序的執行效率。
1、如何使用StringBuffer類
StringBuffer類位於java.util包中,是String類的增強類。聲明StringBuffer對象並初始化的方法如下:
StringBuffer sb = new StringBuffer(“青春無悔”);
2、常用的StringBuffer類方法
(1)、toString()方法
String str = sb.toString(); //轉換成String類
(2)、append()方法
字符串.append(參數);
(3)、insert(位置,參數);
insert();方法可以實現將參數插入到字符串的指定位置。
案例:編寫一個方法,實現將一個數字字符串轉換成逗號分隔的數字串。
1 public class InsertDemo { 2 3 public static void main(String[] args) { 4 String nums = "123418447.6717"; 5 StringBuffer words = newStringBuffer(nums); 6 //向字符串插入逗號 7 int index = words.length(); 8 if (words.lastIndexOf(".")>0) { 9 index = words.lastIndexOf("."); 10 } 11 for (int i = index-3; i >0; i=i-3) { 12 words.insert(i, ‘,‘); 13 } 14 System.out.println(words);15 16 } 17 18 }
分析:利用StringBuffer類的length()方法獲取字符串的長度,使用for循環從後往前每隔三位插入逗號。
二、String類、StringBuilder類及StringBuffer類對比
1.String:字符串常量:不可變的對象,每次賦值等同於生成一個新的String對象。
2.StringBuffer:字符串變量:可變的字符串。
3.StringBuider:字符串變量:JDK1.5以後版本提供:單線程不同步。
三、StringBuffer類的應用:實現商品批發金額的顯示
1 import java.util.Scanner; 2 3 /** 4 * 實現商品批發總金額的顯示 5 * @author Administrator 6 * 7 */ 8 public class Goods { 9 //創建數組存放商品名及對應的價格 10 String[] goods = new String[]{"電風扇","洗衣機","電視機","冰箱","空調機"}; 11 double[] price = new double[]{124.23,4500,8800.90,5000.88,4456,12000.46}; 12 13 //登陸驗證 14 private boolean login(String name, String pwd) { 15 boolean flag = false; 16 if (name.equals("TOM")&&pwd.equals("123")) { 17 System.out.println("登陸成功!"); 18 flag = true; 19 }else{ 20 System.out.println("用戶名和密碼不匹配!"); 21 } 22 return flag; 23 } 24 //打印商品信息 25 private void show() { 26 //1.使用Map集合保存 27 28 //2.使用一般方法打印 29 System.out.println("*************歡迎進入商品批發城*************"); 30 System.out.println("\t編號\t商品\t價格"); 31 for (int i = 0; i < goods.length; i++) { 32 System.out.println("\t"+(i+1)+"\t"+goods[i]+"\t"+price[i]); 33 } 34 System.out.println("****************************************"); 35 } 36 37 //計算訂單總價 38 private double calc(int goodId, int sum) { 39 //根據商品編號查找商品信息 40 int index = goodId-1; 41 double sumPrice = -1; 42 if (index>=0&&index < goods.length) { 43 sumPrice = price[index]*sum; 44 } else { 45 System.out.println("您選擇的商品不存在!"); 46 } 47 return sumPrice; 48 } 49 50 //格式化輸出金額 51 private boolean change(int goodId, int sum) { 52 //調用calc()方法獲取商品金額 53 double d = this.calc(goodId, sum); 54 boolean flag = false;//商品不存在 55 if (d==-1) { 56 return flag; 57 } 58 StringBuffer price = new StringBuffer(String.valueOf(d)); 59 for (int i = price.indexOf(".")-3; i > 0; i = i-3) { 60 price.insert(i, ‘,‘); 61 } 62 System.out.println("您需要付款:"+price); 63 return flag = true; 64 } 65 66 //測試 67 public static void main(String[] args) { 68 Goods g = new Goods(); 69 @SuppressWarnings("resource") 70 Scanner input = new Scanner(System.in); 71 boolean flag = false; 72 do { 73 /*用戶登錄*/ 74 System.out.print("請輸入用戶名:"); 75 String name = input.next(); 76 System.out.print("請輸入密碼:"); 77 String pwd = input.next(); 78 flag = g.login(name, pwd); 79 } while (!flag); 80 //打印批發商品信息 81 g.show(); 82 flag = false; 83 do { 84 //接收用戶批發操作 85 System.out.print("請輸入您批發的商品編號:"); 86 int goodId = input.nextInt(); 87 System.out.print("請輸入批發數量:"); 88 int sum = input.nextInt(); 89 //輸出貨款總額 90 flag = g.change(goodId,sum); 91 } while (!flag); 92 93 } 94 95 }
【學習筆記】String進階:StringBuffer類(線程安全)和StringBuilder類