一、除了使用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 }