学习笔记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的不可变性