Java基础(16)Pattern和Matcher类、Math类、Random类、System类、Date类、SimpleDateFormat类、Calendar类

1. Pattern和Matcher类

1. Pattern和Matcher类的概述
(1)Pattern:模式器,用来封装一个正则表达式。
(2)Matcher:匹配器,用来匹配正则表达式
2. Pattern和Matcher的使用方法
指定为字符串的正则表达式必须首先被编译成Pattern模式,然后将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。
典型的调用顺序是
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestDemo01 {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("a*b");
        Matcher m = p.matcher("aaaab");
        boolean b = m.matches();
        System.out.println(b);  //true
    }
}

2. Math类

1. Math类的概述:Math类中包含了用于执行基本数学运算的方法
2. 成员变量
(1)public static final double E:自然底数
(2)public static final double PI:圆周率

public class TestDemo01 {
    public static void main(String[] args) {
        System.out.println(Math.E);   //2.718281828459045

        System.out.println(Math.PI);  //3.141592653589793
    }
}

3. 成员方法
(1)public static int abs(int a):取绝对值
(2)public static double ceil(double a):向上取整
(3)public static double floor(double a):向下取整
(4)public static int max(int a,int b):取最大值
(5)public static int min(int a,int b):取最小值
(6)public static double pow(double a,double b):取a的b次幂
(7)public static double random():获取随机数,返回带正号的double值,该值大于等于0,小于1
(8)public static int round(float a):四舍五入
(9)public static double sqrt(double a):获取正平方根

public class TestDemo02 {
    public static void main(String[] args) {
        //(1)public static int abs(int a):取绝对值
        System.out.println(Math.abs(-99));  //99
        
        //(2)public static double ceil(double a):向上取整
        System.out.println(Math.ceil(3.14));  //4.0
        
        //(3)public static double floor(double a):向下取整
        System.out.println(Math.floor(3.14));  //3.0
        
        //(4)public static int max(int a,int b):取最大值
        System.out.println(Math.max(55,66));  //66
       
        //(5)public static int min(int a,int b):取最小值
        System.out.println(Math.min(11,22));  //11  
       
        //(6)public static double pow(double a,double b):取a的b次幂
        System.out.println(Math.pow(2.0,3.0));  //8.0
       
        //(7)public static double random():获取随机数,返回带正号的double值,该值大于等于0,小于1
        System.out.println(Math.random());  //0.10794054125991182
       
        //(8)public static int round(float a):四舍五入
        System.out.println(Math.round(8.88));  //9
       
        //(9)public static double sqrt(double a):获取正平方根
        System.out.println(Math.sqrt(4));  //2.0
    }
}

3. Random类

1. Random类概述:此类的实例用于生成伪随机数流
2. 构造方法
(1)public Random():没有给定种子,使用的是默认的(当前系统的毫秒值)
(2)public Random(long seed):给定一个long类型种子,给定以后每一次生成的随机数是相同的
3. 成员方法
(1)public int nextInt():没有参数,表示的随机数范围是一个int类型的范围
(2)public int nextInt(int n):可以指定一个随机数的范围
(3)public void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的空的byte数组中

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

        for (int i = 0; i < 10; i++) {
            int num1 = r1.nextInt(10);   //0~9之间的随机数
            System.out.println(num1);
        }

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

        for (int i = 0; i < 10; i++) {
            int num2 = r1.nextInt(100) + 1;   //1~100之间
            System.out.println(num2);
        }
    }
}

========================================================================

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

public class TestDemo02 {
    public static void main(String[] args) {
        //void nextBytes ( byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中
        byte[] bytes = new byte[10];
        Random r = new Random();
        
        r.nextBytes(bytes);
        System.out.println(Arrays.toString(bytes));   //[42, -99, -91, -2, 120, -44, 90, -103, -49, 79]
    }
}

========================================================================

import java.util.Random;

public class TestDemo03 {
    public static void main(String[] args) {
        Random r1 = new Random();
        System.out.println(r1.nextInt(10));  //空参,每一次重新运行生成的随机数都不一样。

        Random r2 = new Random(100L);
        System.out.println(r2.nextInt(10));  //有参,因为种子固定了,每一次重新运行,生成的随机数一样
    }
}

4. System类

1. System类的概述:System 类包含一些有用的类字段和方法。它不能被实例化。他里面的成员变量和成员方法都是static修饰的,使用类名调用
2. 成员方法
(1)public static void gc():调用垃圾回收器
(2)public static void exit(int status):退出JVM,0为正常退出,非0为异常退出
(3)public static long currentTimeMillis():获取当前时间的毫秒值(从1970 01-01 00:00:00开始计算)

public class TestDemo01 {
    public static void main(String[] args) {
        System.out.println("aaa");
        System.out.println("aaa");

        //public static void exit(int status):退出JVM,0为正常退出,非0为异常退出
        System.exit(0);

        System.out.println("aaa");
        System.out.println("aaa");
        System.out.println("aaa");
        System.out.println("aaa");
    }
}
			/*
			aaa
			aaa
			*/

========================================================================

public class TestDemo02 {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        System.out.println(start);

        for (int i = 0; i < 10; i++) {
            System.out.println("java");
        }

        long end = System.currentTimeMillis();
        System.out.println(end);

        System.out.println("程序运行共计:" + (end - start) + "ms");
    }
}
			/*
			1588837668619
			java
			java
			java
			java
			java
			java
			java
			java
			java
			java
			1588837668620
			程序运行共计:1ms
			*/

5. Date类

1. Date类的概述:Date类表示特定的瞬间,精确到毫秒。月份从0 ~ 11表示1 ~ 12月
2. 构造方法
(1)public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
(2)public Date(long date):分配 Date 对象并初始化此对象,以表示自从标准基准时间(GMT)以来的指定毫秒数

import java.util.Date;

public class TestDemo01 {
    public static void main(String[] args) {
        Date date1 = new Date();
        //重写了toString,输出时,会输出当前的日期
        System.out.println(date1);  //Thu May 07 15:55:59 CST 2020

        Date date2 = new Date(1000 * 60 * 60);
        System.out.println(date2);  //Thu Jan 01 09:00:00 CST 1970
    }
}

3. 成员方法
(1)public long getTime():获取从1970 年 1 月 1 日 00:00:00 到现在的日期日期,所间隔的毫秒值(等同于System.currentTimeMillis())
(2)public void setTime(long time):给从1970 年 1 月 1 日 00:00:00 增加相应的毫秒值(等同于new Date(long date))

import java.util.Date;

public class TestDemo02 {
    public static void main(String[] args) {
        Date date1 = new Date();
        long time = date1.getTime();
        System.out.println(time);   //1588839471475

        Date date2 = new Date();
        date2.setTime(1000 * 60 * 60 * 24);
        System.out.println(date2);   //Fri Jan 02 08:00:00 CST 1970
    }
}

6. SimpleDateFormat类

1. SimpleDateFormat类概述:是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化
2. 构造方法
(1)public SimpleDateFormat():用默认的模式和默认语言环境的日期格式符号构造SimpleDateFormat对象
(2)public SimpleDateFormat(String pattern):使用指定模式(比如yyyy-MM-dd HH:mm:ss)来构造SimpleDateFormat对象
3. 成员方法
(1)public String format(Date date):把一个日期对象格式化为一个字符串
(2)public Date parse(String dateStr):把一个日期字符串解析成一个日期对象

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

public class TestDemo01 {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();

        SimpleDateFormat sdf1 = new SimpleDateFormat();
        String dateStr1 = sdf1.format(date);
        System.out.println(dateStr1);   // 2020/5/7 下午4:33

        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr2 = sdf2.format(date);
        System.out.println(dateStr2);   //2020-05-07 16:35:42

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

        String dateStr3 = "2020-05-07 16:37:11";
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date dateNew = sdf3.parse(dateStr3);
        System.out.println(dateNew);   //Thu May 07 16:37:11 CST 2020
    }
}

4. 案例:计算你来到世界多少天

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

public class TestDemo02 {
    public static void main(String[] args) throws ParseException {
        String birthDay = "1997-07-30";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(birthDay);
        long birthTime = date.getTime();

        long today = System.currentTimeMillis();

        long day = (today - birthTime) /1000 /60 /60 /24;
        System.out.println("出生了" + day + "天");
    }
}

7. Calendar类

1. Calendar类概述:Calendar类是一个抽象类,不能直接new对象,但可以通过它的一个静态方法getInstance()来获取他的对象。它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一下方法。该类用来代替Date类中的过时的方法
在这里插入图片描述

2. 成员方法
(1)public static Calendar getInstance():使用默认时区和语言环境获得一个日历对象
(2)public int get(int field):获得给定日历字段对应的值,field通过Calendar提供的字段来获取

import java.util.Calendar;

public class TestDemo03 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        //java.util.GregorianCalendar[time=1588844890454,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=128,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=48,SECOND=10,MILLISECOND=454,ZONE_OFFSET=28800000,DST_OFFSET=0]

        int year = Calendar.YEAR;
        System.out.println(year);  //1

        int month = Calendar.MONTH;
        System.out.println(month);  //2

        int dayOfMonth = Calendar.DAY_OF_MONTH;
        System.out.println(dayOfMonth);   //5

        int hourOfDay = Calendar.HOUR_OF_DAY;
        System.out.println(hourOfDay);   //11

        int minute = Calendar.MINUTE;
        System.out.println(minute);   //12

    }
}

3. Calendar类的add()和set()方法
(1)public void add(int field,int amount):根据日期规则,为给定的日历字段添加或者减去指定的时间量
(2)public final void set(int year,int month,int date):设置日历时间

import java.util.Calendar;

public class TestDemo04 {
    public static void main(String[] args) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(Calendar.YEAR,2000);
        calendar1.set(Calendar.MONTH,5);
        calendar1.set(Calendar.DATE,11);
        System.out.println(calendar1.get(Calendar.YEAR));  //2000
        System.out.println(calendar1.get(Calendar.MONTH));  //5
        System.out.println(calendar1.get(Calendar.DATE));   //11

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

        Calendar calendar2 = Calendar.getInstance();
        //直接设置 年月日时分秒
        calendar2.set(1999,10,10,15,30,30);

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

        Calendar calendar3 = Calendar.getInstance();
        //先设置时间
        calendar3.set(Calendar.YEAR,2000);
        calendar3.set(Calendar.MONTH,5);
        calendar3.set(Calendar.DATE,11);
        //添加时间
        calendar3.add(Calendar.YEAR,2);
        calendar3.add(Calendar.MONTH,-1);
        calendar3.add(Calendar.DATE,4);
        //获取修改过的时间
        System.out.println(calendar3.get(Calendar.YEAR));  //2002
        System.out.println(calendar3.get(Calendar.MONTH));  //4
        System.out.println(calendar3.get(Calendar.DATE));   //15
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值