章五、API 常用类(3)—— 正则表达式、Math类、Date类、Random类、Calendar类、SimpleDateFormat类、BigInteger类、BigDecimal类

一、 正则表达式


        正则表达式(Regular Expression,简称 regex )是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。

正则表达式可以在文本中查找、替换、提取和验证特定的模式。

菜鸟编程---正则表达式

   数字

public class RegularExpression2 {
    public static void main(String[] args) {

        String s = "";
        //判断是否是 0~9 的数字且只出现一次
        System.out.println(s.matches("[0-9]")); //false
        String s1 = "1";
        String s2 = "12";
        System.out.println(s1.matches("[0-9]")); //true
        System.out.println(s2.matches("[0-9]")); //false
        //要是想匹配多次
        // "*" 表示至少出现零次
        System.out.println(s2.matches("[0-9]*")); //true
        System.out.println(s.matches("[0-9]*")); //true
        // "+" 表示一次到多次
        System.out.println(s.matches("[0-9]+")); //false
        // "?" 表示出现一次以下
        System.out.println(s2.matches("[0-9]?")); //false

        //{n}表示重复 n次
        System.out.println(s2.matches("[0-9]{2}")); //true
        System.out.println(s2.matches("[0-9]{1}")); //false
        //{n.}表示重复 n次 或者 更多次
        //{n,m}表示重复 n次 到 m次
        //判断是否匹配字符串
        String str = "1399";
        String str1 = "2399";
        System.out.println(str.matches("13[0-9]{2}")); //true
        System.out.println(str1.matches("13[0-9]{2}")); //false
        //匹配特殊数字
        System.out.println(str.matches("[139]*")); //只允许出现1或3或9
        System.out.println(str1.matches("[139]*")); //false

    }
}

  字母

/*
字母匹配
 */
public class RegularExpression4 {
    public static void main(String[] args) {

        String s = "abcd";
        String S = "ABCD";
        String str = "aBcD";
        //小写
        System.out.println(s.matches("[a-z]*"));;
        //大写
        System.out.println(S.matches("[A-Z]*"));
        //大小写
        System.out.println(str.matches("[a-zA-Z]*"));
        System.out.println(str.matches("[A-z]*"));;
        //大小写字母和数字和下划线
        System.out.println(str.matches("[A-z0-9]*"));
        System.out.println(str.matches("\\w*"));
        //匹配中文字符
        String str1 = "张三";
        System.out.println(str1.matches("[\\u4e00-\\u9fa5]*"));



    }
}

  测试

public class Test {
    public static void main(String[] args) {
        //验证一个字符串是否是中国大陆手机号?(+86)
        String s = "13999999999";
        /*
        长度:11位
        是否是1开头
        第二位不是2
        之后判断每一位是否是数字
         */
        //定义一个规则
        boolean bl = s.matches("1[357]\\d{9}");
        if(bl){
            System.out.println(s+" 是中国大陆手机号");
        } else{
            System.out.println("不是");
        }
        bl = s.matches("0?(13|14|15|17|18)[0-9]{9}");
        System.out.println(bl);

        //验证一个是否是邮箱
        //\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
        /*
        注: "|"在正则表达式中是或的运算符
        一般:xxxxx@xx.com   com.cn
         */
        String s2 = "123455@qq.com";
        boolean Email;
        Email = s2.matches("\\w{6,10}@[0-9A-z]{2,5}.(com|com.cn)");
        System.out.println(Email);
        //但是,"."也是一个特殊符号---匹配除换行符以外的任意字符
        String s3 = "123456@qqqcom";
        System.out.println(s3.matches("\\w{6,10}@[0-9A-z]{2,5}.(com|com.cn)"));
        //同样也会是true,因此也要加转义字符
        System.out.println(s3.matches("\\w{6,10}@[A-z]{2,5}\\.(com|com\\.cn)"));



    }
}

二、 Math类


        java.lang.Math 提供了一系列 静态方法 用于科学计算;其方法的参数和返回值类型一般为double型。

abs 绝对值

sqrt 平方根

pow(double a, double b) ab次幂

max(double a, double b)

min(double a, double b)

random() 返回 0.0 1.0 的随机数

long round(double a) double型的数据a转换为long型(四舍五入)

public class Math1 {
    public static void main(String[] args) {
        //π的值
        System.out.println("PI = " + Math.PI); //PI = 3.14159265358979323846;
        //求绝对值
        System.out.println(Math.abs(-3));
        //开平方
        System.out.println(Math.sqrt(9));
        //求a的b次幂
        System.out.println(Math.pow(2,3)); //8

        //取近似值
        //向下取整
        System.out.println(Math.floor(9.9)); //9.0
        //向上取整
        System.out.println(Math.ceil(9.1)); //10.0
        //四舍五入
        System.out.println(Math.round(9.3)); //9.0
        System.out.println(Math.round(9.5)); //10.0

        //比大小
        System.out.println(Math.max(10,5)); //10
        //返回一个 0~1 之间的随机数(可能会等于0,但只会小于1)
        System.out.println(Math.random());
        


    }
}

三、 Random类


        Random类,用于产生 随机数

 System.out.println(random.nextInt(5)); //有范围(0~bound)的生成

  构造方法

public Random ()

  成员方法

public int nextInt ()

public int nextInt (int n)

import java.util.Arrays;
import java.util.Random;

public class RandomDemo {
    public static void main(String[] args) {
        Random random = new Random();

        //生成随机boolean值
        System.out.println(random.nextBoolean());
        //随机整数
        System.out.println(random.nextInt());//int范围
        System.out.println(random.nextLong());//long范围
        System.out.println(random.nextInt(5));//有范围 [0~bound) 的生成

        //生成一个随机数组
        byte[] bytes = new byte[5];
        random.nextBytes(bytes);
        System.out.println(Arrays.toString(bytes));

        /*
        int[] ints = new int[5];
        random.nextBytes(ints);
        但是只能生成 byte 类型的数
         */


    }
}

四、 Date类


        使用Data类代表当前系统时间

  构造方法

Date d = new Date();

Date d = new Date(long d);

import java.util.Date;

public class DataDemo {
    public static void main(String[] args) {
        //在系统中获取当前系统时间
        //无参的
        Date date = new Date(); //运行到这一行时那一刻的时间
        System.out.println(date); //以toString输出

        //单另拿出某一个时间类型
        System.out.println(date.getYear()+1900);
        System.out.println(date.getMonth()+1);
        System.out.println(date.getDate());
        System.out.println(date.getHours());
        System.out.println(date.getMinutes());
        System.out.println(date.getSeconds());
        /*
        方法上有删除键,表示该方法以弃用
        有更好的方法来替代
        但原方法仍可以使用
         */

        //获取的是自1970年1月1日0时0分0秒至程序运行时刻的毫秒值
        // 1 ms = 0.001 s
        System.out.println(date.getTime());


    }
}

  计算程序运行时间

import java.util.Date;

public class DataDemo {
    public static void main(String[] args) {


        //获取的是自1970年1月1日0时0分0秒至程序运行时刻的毫秒值
        // 1 ms = 0.001 s
        System.out.println(date.getTime());

        Date d1 = new Date();
        System.out.println("d1:"+d1.getTime());
        int sum = 0;
        for(int i = 0;i<1000;i++){
            sum+=i;
        }
        Date d2 = new Date();
        System.out.println("d2:"+d2.getTime());
        System.out.println(d2.getTime()-d1.getTime());


        /*
        有参的
         */
        Date date1 = new Date(1709811745721L); //默认为int,所以要加L转型
        System.out.println(date1);
    }
}

五、 Calendar类


        Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用 getInstance 方法创建即可。

Calendar c1 = Calendar.getInstance();

c1.get(Calendar. YEAR);

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //因为Calendar是一个抽象类,所以使用的时要使用他的子类
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar); //公历(格里高利日历)

        //传入一个日历字段
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MARCH));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println(calendar.get(Calendar.MINUTE));
        System.out.println(calendar.get(Calendar.SECOND));
        System.out.println();

        //同样的,获取从1970.1.1 0时0分0秒到现在的毫秒时
        System.out.println(calendar.getTimeInMillis());
        System.out.println();

        //也可以设定一个时间
        calendar.set(2024,3,1);
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    }
}

六、 SimpleDateFormat类


        SimpleDateFormat :日期格式化类

  构造方法

SimpleDateFormat(格式); // yyyy-MM-dd

  日期转字符串

Date now=new Date();

myFmt.format(now);

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    //抛出错误,不管
    public static void main(String[] args) throws ParseException {
        String s = "2024-03-01";
        /*
        把字符串日期转为日期对象
         */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //需要传入一个格式
        Date date = sdf.parse(s); //返回一个date类型的对象
        System.out.println(date.getYear()+1900);
        System.out.println(date.getMonth()+1);
        System.out.println(date.getDate());
        System.out.println(date);


    }
}

  字符串转日期

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    //抛出错误,不管
    public static void main(String[] args) throws ParseException {
        /*
        把日期对象转化为指定格式的字符串
         */
        Date date1 = new Date(); //时间以后端时间为准
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s1 = sdf1.format(date1);
        System.out.println(s1);

    }
}

七、 BigInteger


在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性。

        我们都知道 Integer 是 Int 的包装类,int 的最大值为 2^31-1 。若希望描述更大的整数数据时,使用Integer 数据类型就无法实现了,所以Java中提供了BigInteger 类。

BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。

BigInteger类位于java.math包中

  构造方法

BigInteger(String val) /BigInteger(byte[] val) ...

  基本运算方法

add(),加

subtract(),减

multiply(),乘

divide(),除

import java.math.BigInteger;

public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("1111111111111111111111111111111111111111111111111111111111111111111111111111");
        BigInteger bigInteger1 = new BigInteger("9999999999999999999999999999999999999999999999999999999999999999999999999999");
        System.out.println(bigInteger);
        System.out.println(bigInteger1);
        //加 add()
        System.out.println(bigInteger.add(bigInteger1));
        //减 subtract()
        System.out.println(bigInteger1.subtract(bigInteger));
        //乘 multioly()
        System.out.println(bigInteger.multiply(bigInteger1));
        //除 divide()
        System.out.println(bigInteger1.divide(bigInteger));
    }
}

八、 BigDecimal


        在计算机中, float 还是 double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。根本原因在于:十进制浮点值没有完全相同的二进制表示形式;十进制浮点值的二进制表示形式不精确,只能无限接近于那个值。

System.out.println((0.1 + 0.2)==0.3);        //结果是?

但是,在项目中,我们不可能让这种情况出现,特别是金融项目,因为涉及金额的计算都必须十分精确,你想想,如果你的支付宝账户余额显示 193.99999999999998 ,那是一种怎么样的体验?

因此,Java在java.math包中提供了 BigDecimal 类

  构造方法

BigDecimal(String val)

  基本运算方法

add(),加

subtract(),减

multiply(),乘

divide(),除 // 除法时,如果遇到无法除尽的,需要给定保留的小数位,并选定舍入模式

import javax.xml.transform.Source;
import java.math.BigDecimal;

public class BigDecimalDemo {
    public static void main(String[] args) {
        System.out.println((0.1 + 0.2) == 0.3);//false
        System.out.println((0.3+0.36));
        BigDecimal bigDecimal1 = new BigDecimal("0.1");
        BigDecimal bigDecimal2 = new BigDecimal("0.2");
        BigDecimal bigDecimal3 = new BigDecimal("0.3");
        BigDecimal bigDecimal4 = new BigDecimal("0.36");
        System.out.println(bigDecimal1.add(bigDecimal2));
        System.out.println(bigDecimal3.add(bigDecimal4));
        
        /*
        注:除
        当除法除不尽时,需要给定保留的小数位数,以及舍入模式
         */
        BigDecimal b1 = new BigDecimal("10");
        BigDecimal b2 = new BigDecimal("3");
        System.out.println(b1.divide(b2,2,1)); //最后一位舍弃
        System.out.println(b1.divide(b2,2,2)); //最后一位进位
        //                              保留2位      模式2
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三木几

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值