千家信息网

JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容介绍了"JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况
千家信息网最后更新 2025年11月07日JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用

本篇内容介绍了"JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1 正则表达式Regex

1.1 概述

正确的字符串格式规则。

常用来判断用户输入的内容是否符合格式的要求,注意是严格区分大小写的。

1.2 常见语法

1.3 String提供了支持正则表达式的方法

Matches(正则) : 当前字符串能否匹配正则表达式

replaceAll(正则,子串) : 替换子串

split(正则) : 拆分字符串

1.4 练习:测试输入身份证号

创建包: cn.tedu.api

创建类: TestRegex.java

package cn.tedu.api;import java.util.Scanner;/*本类用于正则表达式入门案例*///需求:接收用户输入的身份证号,并将判断的结果输出public class TestRegex {    public static void main(String[] args) {        //1.编辑正则表达式        //身份证号的规律:一共是18位,前17位是数子,第18位有可能是数字,也有可能是X        //String regex = "[0-9]{17}[0-9X]";        /*单个\在Java中有特殊的含义,表示转义符号,不认为是一个斜杠         * 所以如果想要表示斜杠,需要在它的前面加一个用来转义的\         * 也就是\\才表示成一个单纯的斜杠         * \t -- 制表符  \r回车符 \n换行符*/        String regex = "\\d{17}[0-9X]";        //2.定义变量用来接收用户输入的身份证号:        String input;        //3.判断用户输入的数据是否符合正则表达式,如果不正确,继续输入        do {            System.out.println("请输入您的身份证号:");            input = new Scanner(System.in).nextLine();            if (input.matches(regex)) {//如果身份证号正确                System.out.println("恭喜你!输入正确!");                return;//结束本方法            }        } while (!input.matches(regex));//只要不符合正则表达式,就继续输入    }}

2 包装类

把基本类型进行包装,提供更加完善的功能。

基本类型是没有任何功能的,只是一个变量,记录值,而包装类可以有更加丰富的功能

2.1 与基本类型的对应关系

2.2 Number

数字包装类的抽象父类。

提供了各种获取值的方式。

2.3 Integer 创建对象

方式一: new Integer(5);

方式二: Integer.valueOf(5);

Integer类中包含256个Integer缓存对象,范围是 -128~127

使用valueOf()时,如果指定范围内的值,直接访问缓存对象不新建;如果指定范围外的值,直接新建对象。

常见方法

static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析

2.4 练习: Number之Integer

创建包: cn.tedu. api

创建类: TestNumber.java

package cn.tedu.api;/*本类用于测试包装类*/public class TestNumber {    //1.定义成员变量,注意要设置成静态的,因为静态只能调用静态    static Integer i0;    public static void main(String[] args) {        //2.打印Integer的默认值进行测试        System.out.println(i0);//默认值为null        //3.创建int类型对应的包装类Integer类型的对象--方式一        Integer i1 = new Integer(5);        Integer i11 = new Integer(5);        System.out.println( i1 == i11 );//false,==对于引用类型,比较的是地址值        //4.创建int类型对应的包装类Integer类型的对象--方式二        /*Integer有一个高效的效果,数据在:(-128~127)        * 在此范围内,相同的数据只会存一次,后续再存都是使用之前存过的数据*/        Integer i2 = Integer.valueOf(127);        Integer i3 = Integer.valueOf(127);        System.out.println(i1 == i2);//false        System.out.println(i2 == i3);//true        //满足高效效果的3个条件:Integer valueOf() -128~127        Integer i4 = Integer.valueOf(300);        Integer i5 = Integer.valueOf(300);        System.out.println(i4 == i5);//false    }}

2.5 Double

创建对象

  • new Double(3.14)

  • Double.valueOf(3.14)//和 new 没有区别 常用方法

Double.parseDouble();

2.5 练习: Number之Double

创建包: cn.tedu.api

创建类: TestNumber.java

package cn.tedu.api;/*本类用于测试基本类型的包装类*/public class TestNumber {    public static void main(String[] args) {        //1.创建int包装类Integer对象的方式1        Integer i1 = new Integer(100);        Integer i11 = new Integer(100);        System.out.println(i1 == i11);//false,new了两次,是两个不同的对象,地址值不同        //2.创建int包装类Integer对象的方式2        /*Integer有一个高效的效果,但是必须满足3个条件:        * 1.是Integer类型        * 2.使用valueOf()的创建方式        * 3.数据在-128~127的范围内        * 满足以上条件,相同的数据只会存一次,后续再使用都是以前存过的数据*/        Integer i2 = Integer.valueOf(100);        Integer i22 = Integer.valueOf(100);        System.out.println(i2 == i22);//true        Integer i3 = Integer.valueOf(300);        Integer i33 = Integer.valueOf(300);        System.out.println(i3 == i33);//false 超出高效的数据范围-128~127        //3.创建double包装类Double对象的方式1        Double d1 = new Double(3.14);        Double d11 = new Double(3.14);        System.out.println(d1 == d11);//false,创建两个不同的对象,地址值不同        //4.创建double包装类Double对象的方式2        /*只有Integer才有高效的效果Double是没有的*/        Double d2 = Double.valueOf(3.14);        Double d22 = Double.valueOf(3.14);        System.out.println(d1 == d2);//false        System.out.println(d2 == d22);        //5.测试常用方法        //这个方法的作用就是把传入的String类型的数据转成int        /*对象是什么类型的,就可以使用这个类的所有资源        i1是Integer类型的对象,所以可以使用parseInt()将String类型的数据转为int类型        d1是Double类型的对象,所以可以使用parseDouble()将String类型的数据转为double类型*/        System.out.println(i1.parseInt("800")+8);//808->int+int        System.out.println(d1.parseDouble("2.2")+3.1);//5.300000000000001->double+double    }}

3 自动装箱和自动拆箱

3.1 概述

自动装箱:把 基本类型 包装成对应的 包装类型 的过程

Integer a = 5;//a是引用类型,引用了包装对象的地址。

编译器会完成对象的自动装箱:Integer a = Integer.valueOf(5);

自动拆箱:从包装类型的值,自动变成 基本类型的值

int i = a;//a现在是包装类型,没法给变量赋值,需要把5取出来。

编译器会完成自动拆箱:int i = a.intValue();

3.2 练习: 自动装箱与自动拆箱测试

创建包: cn.tedu.api

创建类: TestBox.java

package cn.tedu.api;/*本类用于测试自动装箱和自动拆箱*/public class TestBox {    public static void main(String[] args) {        //1.定义包装类型的数据        //回顾:以前创建包装类型的两种方式        Integer i1 = new Integer(127);        Integer i2 = Integer.valueOf(127);        //2.现在的方式:        /*1.自动装箱:编译器会自动把基本类型int 5,包装成包装类型Integer        * 然后交给i3来保存,自动装箱底层发生的代码Integer.valueOf(5);        * valueOf()的方向: int --> Integer*/        Integer i3 = 5;//不会报错,这个现象就是自动装箱        /*2.自动拆箱:编译器会自动把包装类型的i1拆掉"箱子",变回基本类型数据127        * 然后交给i4来保存,自动拆箱底层发生的代码:i1.intValue();        * intValue()的方向:Integer -> int        * */        int i4 = i1;//不会报错,这个现象就是自动拆箱    }}

4 BigDecimal

BigDecimal:常用来解决精确的浮点数运算不精确的问题

4.1 创建对象

方式一 :

BigDecimal(doubleval)

将double转换为BigDecimal,后者是double的二进制浮点值十进制表示形式,有坑!

方式二 :

BigDecimal(String val)

将String类型字符串的形式转换为BigDecimal

4.2 常用方法

Add(BigDecimal bd) : 做加法运算
Subtract(BigDecimal bd) : 做减法运算
Multiply(BigDecimal bd) : 做乘法运算
Divide(BigDecimal bd) : 做除法运算,除不尽时会抛异常
Divide(BigDecimal bd,保留位数,舍入方式) : 除不尽时使用
setScale(保留位数,舍入方式) : 同上
pow(int n) : 求数据的几次幂

4.3 练习:测试常用方法

创建包: cn.tedu.bigdecimal

创建类: TestBigDecimal.java

需求: 接收用户输入的两个小数,做运算

package cn.tedu.api;import java.math.BigDecimal;import java.util.Scanner;public class TestBigDecimal {    public static void main(String[] args) {        //f1();//使用普通的 +-*/ 四则运算,暴露出浮点数运算不精确的问题        f2();//使用BigDecimal来解决浮点数运算不精确的问题    }    private static void f2() {        //1.提示并接收用户输入的两个小数        System.out.println("请输入您要计算的两个小数:");        double a = new Scanner(System.in).nextDouble();        double b = new Scanner(System.in).nextDouble();        //2.创建工具类对象,把基本类型a和b交给工具类对象BigDecimal来保存        /*1.最好不要用double作为构造函数的参数,不然还会有不精确的现象,有坑!!!*/        /*2.最好使用重载的,参数类型是String的构造函数        * double转String,直接拼个空串就可以*/        BigDecimal bd1 = new BigDecimal(a+"");        BigDecimal bd2 = new BigDecimal(b+"");        //3.通过BigDecimal的对象来调用其方法,实现精确运算        //3.1 定义BigDecimal类型的引用类型变量来保存结果        BigDecimal bd3;        //3.2 Add(BigDecimal bd) : 做加法运算        bd3 = bd1.add(bd2);        System.out.println(bd3);        //3.3 Subtract(BigDecimal bd) : 做减法运算        bd3 = bd1.subtract(bd2);        System.out.println(bd3);        //3.4 Multiply(BigDecimal bd) : 做乘法运算        bd3 = bd1.multiply(bd2);        System.out.println(bd3);        //3.5 Divide(BigDecimal bd) : 做除法运算,除不尽时会抛异常        /*3.除法运算,除不尽时会抛出异常ArithmeticException*/        //方案一:(除不尽时有问题)        //bd3 = bd1.divide(bd2);        /*divide(m,n,o)        m是要除以哪个对象,n指要保留几位,o指舍入方式(比如四舍五入)*/        //方案二:        bd3 = bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);        System.out.println(bd3);    }    private static void f1() {        //1.提示并接收用户输入的两个小数        System.out.println("请输入您要计算的两个小数:");        double a = new Scanner(System.in).nextDouble();        double b = new Scanner(System.in).nextDouble();        //2.做运算        System.out.println(a + b);//不精确        System.out.println(a - b);//不精确        System.out.println(a * b);//不精确        System.out.println(a / b);//不精确    }}

5 拓展

舍入方式解析

ROUND_HALF_UP 四舍五入,五入 如:4.4结果是4; 4.5结果是5

ROUND_HALF_DOWN 五舍六入,五不入 如:4.5结果是4; 4.6结果是5

ROUND_HALF_EVEN 公平舍入(银行常用)

比如:在5和6之间,靠近5就舍弃成5,靠近6就进位成6,如果是5.5,就找偶数,变成6

ROUND_UP 直接进位,不算0.1还是0.9,都进位

ROUND_DOWN 直接舍弃,不算0.1还是0.9,都舍弃

ROUND_CEILING(天花板) 向上取整,取实际值的大值

朝正无穷方向round 如果为正数,行为和round_up一样,如果为负数,行为和round_down一样

ROUND_FLOOR(地板) 向下取整,取实际值的小值

朝负无穷方向round 如果为正数,行为和round_down一样,如果为负数,行为和round_up一样

"JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

类型 包装 对象 方式 运算 数据 输入 正则 装箱 精确 表达式 方法 测试 两个 用户 结果 范围 证号 身份 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 创业一个软件开发要多少钱 辽宁通用服务器云服务器 我与网络安全文案 5g网络安全闭环 php和哪个数据库表 网络安全信息共享机制管理规定 备份数据库没有选中任何表 将云硬盘挂载给弹性云服务器 外网访问内部服务器 软件开发流程是选择题 串口服务器怎么看主机名 服务器安全狗老版本 庆余年手游最新服务器 计算机网络技术管理方向论文 公安厅 网络安全培训 网络安全渗透培训 宁波海曙玖源网络技术有限公司 游戏软件开发需要的软件 南平办公软件开发公司 软件开发服务费和技术服务费发票 饥荒联机版如何快速启动服务器 密码学与网络安全第6版答案 数据库如何导出用过的命令 数据库错误1820 国三网络技术题库 百度云 部队通信网络技术 主干网络技术选择 网络技术专业要精通的语言 《密码学与网络安全》 湖南三智互联网科技有限公司
0