• 【学习笔记】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 }
  • 相关阅读:
    Navicat 连接MySQL 8.0.11 出现2059错误
    安全技术运营的心得
    浅谈命令混淆
    2021年度总结与2022新的展望
    域环境搭建之安装exchange
    内网ADCS攻防
    CVE202142287复现
    企业安全建设——安全防线框架建设(一)
    frp_v0.37.1内网穿透,内网服务公网用不求人
    WP7XNA 多点触摸
  • 原文地址:https://www.cnblogs.com/tengqiuyu/p/6918948.html
Copyright © 2020-2023  润新知