1. 程式人生 > >【學習筆記】String進階:StringBuffer類(線程安全)和StringBuilder類

【學習筆記】String進階:StringBuffer類(線程安全)和StringBuilder類

n) static this util double 字符串 對象 ice 單線程

一、除了使用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 = new
StringBuffer(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類