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
}
}