目录
1 正则表达式Regex
1.1 概述
1.2 常见语法
1.3 String提供了支持正则表达式的方法
1.4 练习:测试输入身份z号
2 包装类
2.1 与基本类型的对应关系
2.2 Number
2.3 Integer
2.4 练习: Number之Integer
2.5 Double
2.5 练习: Number之Double
3 自动装箱和自动拆箱
3.1 概述
3.2 练习: 自动装箱与自动拆箱测试
4 BigDecimal
4.1 创建对象
4.2 常用方法
4.3 练习:测试常用方法
5 拓展
1 正则表达式Regex
1.1 概述
正确的字符串格式规则。
常用来判断用户输入的内容是否符合格式的要求,注意是严格区分大小写的。
Matches(正则) : 当前字符串能否匹配正则表达式
replaceAll(正则,子串) : 替换子串
split(正则) : 拆分字符串
创建包: cn.tedu.api
创建类: TestRegex.java
package cn.tedu.api; import java.util.Scanner; //需求:接收用户输入的身份z号,并将判断的结果输出 public class TestRegex { public static void main(String[] args) { //1.编辑正则表达式 //身份z号的规律:一共是18位,前17位是数子,第18位有可能是数字,也有可能是X //String regex = "[0-9]{17}[0-9X]"; String regex = "\d{17}[0-9X]"; //2.定义变量用来接收用户输入的身份z号: String input; //3.判断用户输入的数据是否符合正则表达式,如果不正确,继续输入 do { System.out.println("请输入您的身份z号:"); input = new Scanner(System.in).nextLine(); if (input.matches(regex)) {//如果身份z号正确 System.out.println("恭喜你!输入正确!"); return;//结束本方法 } } while (!input.matches(regex));//只要不符合正则表达式,就继续输入 } }2 包装类
把基本类型进行包装,提供更加完善的功能。
基本类型是没有任何功能的,只是一个变量,记录值,而包装类可以有更加丰富的功能
数字包装类的抽象父类。
提供了各种获取值的方式。
创建对象
方式一: 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 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 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 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 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();
创建包: 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.现在的方式: Integer i3 = 5;//不会报错,这个现象就是自动装箱 int i4 = i1;//不会报错,这个现象就是自动拆箱 } }4 BigDecimal
BigDecimal:常用来解决精确的浮点数运算不精确的问题
4.1 创建对象
方式一 :
BigDecimal(double val)
将double转换为BigDecimal,后者是double的二进制浮点值十进制表示形式,有坑!
方式二 :
BigDecimal(String val)
将String类型字符串的形式转换为BigDecimal
4.3 练习:测试常用方法
Add(BigDecimal bd) : 做加法运算
Subtract(BigDecimal bd) : 做减法运算
Multiply(BigDecimal bd) : 做乘法运算
Divide(BigDecimal bd) : 做除法运算,除不尽时会抛异常
Divide(BigDecimal bd,保留位数,舍入方式) : 除不尽时使用
setScale(保留位数,舍入方式) : 同上
pow(int n) : 求数据的几次幂
创建包: 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来保存 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) : 做除法运算,除不尽时会抛异常 //方案一:(除不尽时有问题) //bd3 = bd1.divide(bd2); //方案二: 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一样
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)