zoukankan      html  css  js  c++  java
  • 【学习笔记】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("	编号	商品	价格");
    31         for (int i = 0; i < goods.length; i++) {
    32             System.out.println("	"+(i+1)+"	"+goods[i]+"	"+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 }
  • 相关阅读:
    Java读取文件方法和给文件追加内容
    Java中String类的format方法使用总结
    Java时间戳与日期格式字符串的互转
    Eclipse遇到Initializing Java Tooling解决办法
    CSS的总结(选择器,伪类等...)
    Redis中的关系查询(范围查询,模糊查询等...)
    Redis中文显示为Unicode编码的解决办法
    用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
    MapReduce按照两个字段对数据进行排序
    Scala中的抽象类
  • 原文地址:https://www.cnblogs.com/tengqiuyu/p/6918948.html
Copyright © 2011-2022 走看看