Day25 P25 String案例演示 P26 StringBuffer和StringBuilder P27 BigDecimal的使用

本文介绍了Java中处理字符串的实例,包括分解单词、替换、插入和调整首字母大小写。接着探讨了可变字符串StringBuffer和StringBuilder的差异,重点在于线程安全性和效率。最后讲解了BigDecimal的运用,用于高精度数学计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Day25

P25 String案例演示

需求:

  • 已知String str = “this is a text”;
  • 1.将str中的单词单独获取出来
  • 2.将str中的text替换为practice
  • 3.在text前面插入一个easy
  • 4.将每个单词的首字母改为大写
package com.changyonglei.baozhuanglei.demo01;
/*
    需求:

    - 已知String str = "this is a text";
    - 1.将str中的单词单独获取出来
    - 2.将str中的text替换为practice
    - 3.在text前面插入一个easy
    - 4.将每个单词的首字母改为大写

 */
public class Demo4 {
    public static void main(String[] args) {
        String str="this is a text";
        // 1.将str中的单词单独获取出来
        String[] arr=str.split(" ");
        for (String s:arr) {
            System.out.println(s);
        }
        System.out.println("====================================");
        // 2.将str中的text替换为practice
        String str2=str.replace("text","practice");
        System.out.println(str2);

        System.out.println("==================================== ");
        // 3.在text前面插入一个easy
        String str3=str.replace("text","easy text");
        System.out.println(str3);

        System.out.println("=====================================");
        // 4.将每个单词的首字母改为大写
        for (int i=0;i<arr.length;i++){ //遍历出上面1.中的数组arr
            char first=arr[i].charAt(0);//取出每个数组元素的首字母
            char upperfirst=Character.toUpperCase(first);
                 //用char的包装类中的小写变大写方法把首字母变大写
            String news=upperfirst+arr[i].substring(1);
                //substring()方法是截取方法,substring(1)是从下标为1的
                // 位置截取字符串剩余部分,此处是要得到单词首字母之外的部分
                // 然后和变大写的首字母拼接到一起
            System.out.println(news);
        }

        /*  输出:
            this
            is
            a
            text
            ====================================
            this is a practice
            ====================================
            this is a easy text
            =====================================
            This
            Is
            A
            Text

         */

    }
}



P26 StringBuffer和StringBuilder

可变字符串

  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢 (但比String快),线程安全;(相当于增加String类功能的增强类,事先开辟一个缓冲区buffer,操作的话直接在缓冲区操作,这样效率比字符串String类 高,内存节省程度上也比String好,)
  • StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全;(与StringBuffer功能一样,唯一不同是 线程不安全 运行效率比StringBuffer快)
package com.changyonglei.baozhuanglei.demo01;
     /*
       StringBuffer和StringBuilder的使用
       
       1、和String区别 (1)效率比String高  (2)比String节省内存
       
       2、StringBuffer和StringBuilder常用的4个方法
          (1).append()方法;追加  (在缓存区追加数据)
          (2).insert();添加  可以在字符串任意位置添加数据
          (3).replace() 跟String的replace方法不同的是 可以指定位置替换
          (4).delete(); 删除  删除第*位到第*位(包头不包尾)

     */

public class Demo5 {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        //写StringBuilder sb=new StringBuilder();也可以,他俩功能一样

        //1.append()方法;追加  (在缓存区追加数据)
        sb.append("java世界第3");
        System.out.println(sb.toString());
           //输出:java世界第3
           //toString()方法,把sb变成String字符串类型输出
        sb.append("java真相");
        System.out.println(sb.toString());
           //输出:java世界第3java真相
        sb.append("java不戳");
        System.out.println(sb.toString());
           //输出:java世界第3java真相java不戳

        System.out.println("===========================");

        //2.insert();添加  可以在字符串任意位置添加数据
        sb.insert(0,"我在最钱面");//在字符串下标0位置添加
        System.out.println(sb.toString());
           //输出:我在最钱面java世界第3java真相java不戳

        System.out.println("===========================");

        //3.replace() 跟String的replace方法不同的是 可以指定位置替换
        sb.replace(0,5,"hello");
           //表示字符串第0位到第4位(共5个字符,包头不包尾 不含第五位字符)
           //被“hello”这5个字符替换
        System.out.println(sb.toString());
          //输出:hellojava世界第3java真相java不戳

        System.out.println("===========================");

        //4.delete(); 删除  删除第*位到第*位(包头不包尾)
        sb.delete(0,5);//删除第0、1、2、3、4这五位字符
        System.out.println(sb.toString());
           //输出:java世界第3java真相java不戳
        //清空
        sb.delete(0,sb.length());//删除所有字符
        System.out.println(sb.length());//输出:0
        System.out.println(sb.toString());
           //输出:空的 没有东西 什么都不输出



    }

}

package com.changyonglei.baozhuanglei.demo01;

/**
 *   验证StringBuilder效率高于String
 */
public class Demo6 {
    public static void main(String[] args) {
        //开始时间
        long start=System.currentTimeMillis();
//        String string="";
//        for (int i=0;i<99999;i++){
//            string+=i;
//        }
//        System.out.println(string);
        StringBuilder sb=new StringBuilder();
        for (int i=0;i<99999;i++){
            sb.append(i);
        }
        long end=System.currentTimeMillis();
        System.out.println("用时:"+(end-start));
    }
    //String 用时:17027
    //StringBuilder 用时:8
}



P27 BigDecimal的使用

在这里插入图片描述

在这里插入图片描述

//上面图片上的思考题

package com.changyonglei.baozhuanglei.demo01;

public class Demo7 {
    public static void main(String[] args) {
        double d1=1.0;
        double d2=0.9;
        System.out.println(d1-d2);//输出0.09999999999999998

        //面试题
        double result=(1.4-0.5)/0.9;
        System.out.println(result);//输出0.9999999999999999

        //问题:为什么d1-d2不是0.1 ?
        //     为什么(1.4-0.5)/0.9 不是1 ?
        /*  答:因为double和float类型的储存方式是近似值储存方式,也就
              是说我们存的是1.0 但是实际上在内存里可能并不是1.0 而是
              0.999999999,而有些我们看到是0.9但存的可能是0.89999,
              所以说存的是近似值,经过一些算术运算之后可能结果出现一些误
              差,这个误差可能很小,如果在允许范围之内是没有问题的,但是
              在一些行业他要求精度比较高,比如银行,在这种情况下用double
              或者float类型的1.0-0.9出现0.0999999是不允许的,对精度
              要求高的时候就要用BigDecimal类。

         */
    }
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

package com.changyonglei.baozhuanglei.demo01;

import java.math.BigDecimal;

public class Demo7 {
    public static void main(String[] args) {
        double d1=1.0;
        double d2=0.9;
        System.out.println(d1-d2);//输出0.09999999999999998

        //面试题
        double result=(1.4-0.5)/0.9;
        System.out.println(result);//输出0.9999999999999999

        //问题:为什么d1-d2不是0.1 ?
        //     为什么(1.4-0.5)/0.9 不是1 ?
        /*  答:因为double和float类型的储存方式是近似值储存方式,也就
              是说我们存的是1.0 但是实际上在内存里可能并不是1.0 而是
              0.999999999,而有些我们看到是0.9但存的可能是0.89999,
              所以说存的是近似值,经过一些算术运算之后可能结果出现一些误
              差,这个误差可能很小,如果在允许范围之内是没有问题的,但是
              在一些行业他要求精度比较高,比如银行,在这种情况下用double
              或者float类型的1.0-0.9出现0.0999999是不允许的,对精度
              要求高的时候就要用BigDecimal类。

         */

        System.out.println("=========================");


        //BigDecimal 大的浮点数精确计算

        BigDecimal bd1=new BigDecimal("1.0");
          //注意:最右边的BigDecimal()类型一定要用字符串String类型的
          //   BigDecimal(String val)类,因为字符串是最准确的
        BigDecimal bd2=new BigDecimal("0.9");

        //BigDecimal 减法
        //类的运算的话就 不能直接用bd1-bd2了,我们用类的方法进行计算
        BigDecimal r1=bd1.subtract(bd2);
        System.out.println(r1);//输出0.1

        //BigDecimal 加法
        BigDecimal r2=bd1.add(bd2);
        System.out.println(r2);//输出1.9

        //BigDecimal 乘法
        BigDecimal r3=bd1.multiply(bd2);
        System.out.println(r3);//输出0.90

        //BigDecimal 除法
        BigDecimal r4 = new BigDecimal("1.4")
                .subtract(new BigDecimal("0.5"))
                .divide(new BigDecimal("0.9"));
        System.out.println(r4);//输出1
        //当除不尽时怎么办?
        BigDecimal r5=new BigDecimal("10")
        .divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
        //除不尽时在.divide( ,,)括号里面加上保留几位小数,用四
        // 舍五入的方式保留小数,如上边.divide(new BigDecimal("3")后
        // 边加了个,2表示保留2位小数,.divide(new BigDecimal("3"),2
        // 后加了个,BigDecimal.ROUND_HALF_UP表示用四舍五入的方式保留
        //小数
        System.out.println(r5);//输出3.33

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值