学习笔记String进阶:StringBuffer类(线程安全)和StringBuilder类

Posted 滕秋宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记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 = 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类的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Java中String/StringBuffer/StringBuilder的区别

Java学习笔记-------String,StringBuffer,StringBuilder区别以及映射到的同步,异步相关知识

Java学习笔记20(String类应用StringBuffer类StringBuilder类)

Thinking in java学习笔记之String的不可变性

Java学习笔记4.1.2 字符串 - StringBuffer类与StringBuilder类

Java: Java学习笔记之 String的常见用法