本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、Math类
位于 java.lang,包含用于执行数学运算的静态方法( static 修饰),比如平方、随机数...
常用方法
max()
:求两个数的最大值min()
:求两个数的最小值ceil()
:向上取整floor()
:向下取整round()
:返回最接近的数值(原理:加0.5向下取整)random()
:返回[0, 1.0)之间的随机数
计算[m, n]公式:(int)(Math.random() * (n - m + 1)) + m
public static void main(String[] args) {
// 需求 1:产生一个[0,10]的随机整数
// step 1: [0, 1.0) * 11 => [0, 11.0)
System.out.println(Math.random() * 11);
// step 2: (int)[0, 11.0) => [0, 10]
int r2 = (int)(Math.random() * 11);
System.out.println(r2);
// 需求 2:产生一个[10,20]的随机整数
// step 1: [0, 1.0] * 11 => [0, 11.0)
// step 2: (int)[0, 11.0) => [0, 10]
// step 3:[0, 10] + 10 => [10, 20]
// 需求 3:产生一个[m, n]的随机整数
// step 1 : [0, 1.0) * (n - m + 1) => [0, n-m+1)
// step 2 : (int)[0, n - m + 1) => [0, n - m]
// step 3 : [e , n - m] + m => [m, n]
int m = 30, n = 40;
int r3 = (int) (Math.random() * (n - m + 1)) + m;
System.out.println("r3 = " + r3);
}
复制代码
静态工厂方法:Java中,不需要通过 new 创建对象来调用的静态方法称为静态工厂方法,比如 Math 类、 UUID 类中的某些方法。
Random类
位于 java.util,用于产生一个伪随机数,同一种子,产生的随机数相同
int nextInt()
:生成一个随机整数int nextInt(int n)
:产生范围在 [0,n) 的随机数
public static void main(String[] args) {
/*
执行结果:23
23
33
random 和 random1 的种子都是1024,产生的随机数是一样,这绝不是偶然,详细的可以自己研究下源码
*/
Random random = new Random(1024);
System.out.println(random.nextInt(100));
Random random1 = new Random(1024);
System.out.println(random1.nextInt(100));
Random random2 = new Random(2048);
System.out.println(random2.nextInt(100));
}
复制代码
二、UUID
位于 java.util,出生于 JDK 1.5,表示通用唯一标识符(Universally Unique Identifier),通过电脑网卡、当地时间、随机数组合产生
- 优点:唯一性
- 缺点:字符串太长
常用方法
static UUID randomUUID()
:生成一个随机序列,格式:678f9568-8967-4637-a48e-f0eae30faf43String toString()
:将UUID转为String
三、日期时间类
先提三个小问题:
计算机如何表示时间?由于时间是不停变化的,所以计算机不直接存储具体时间。
时间戳(timestamp):此刻距离历元(1970年01月01日 00:00:00:000)所经过的毫秒数,用long类型存储。
为什么时间戳相同,而时间却不同?这是因为时区不同导致时间不同,计算机以格林尼治所在地的标准时间作为时间统一协调时,这个时间在民间称为格林尼治时间(GMT),为了统一国际用法,也称世界协调时(UTC)。
如何计算当地时间?当地时间 = UTC + 时区偏移,中国位于东八区,时区偏移为(+8:00),即中国时间 = UTC + 8:00
Date类
位于 java.util 包下,表示特定的瞬间,内部包装了一个 long 类型的 fastTime
常用方法
Date()
:获取当前时间getTime()
:获取时间戳
SimpleDateFormat类
位于 java.text,是一个日期格式化类
-
SimpleDateFormat([pattern])
:创建一个日期格式化对象,并指定格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 复制代码
-
String format(Date date)
:格式化日期,即转为字符串(Date --> String) -
Date parse(String sourse)
:解析日期字符串(String --> Date) -
applyPattern()
:设置日期时间转换格式SimpleDateFormat sdf = new SimpleDateFormat(); String pattern = "yyyy-MM-dd HH:mm:ss"; sdf.applyPattern(pattern); 复制代码
Calendar类
位于 java.util,出生于 JDK 1.1
Calendar 类内部封装了 long time 表示时间戳,并提供了用于对 time 计算年月日时...等日历字段的方法,这些字段被封装到一个数组中,get() 方法获取相应字段的值。
提供了用来对日期做加减、重新设置日期时间等方法。
本身是一个抽象类,通过 getInstance 方法获取对象,底层创建的是 Calendar 的子类对象。
常用方法
getInstance()
:获取对象get()
:获取日历字段信息Calendar calendar = Calendar.getInstance(); calendar.get(Calendar.YEAR) 复制代码
set()
:设置日历字段信息getTime()
:将Calendar时间转为Date对象setTime()
:使用Date对象设置Calendar的时间add()
:给日历字段信息加上指定的值
常用变量
- YEAR
- MONTH
- DATE / DATE_OF_MONTH
- HOUR / HOUR_OF_DAY
- MINUTE
- SECOND
四、正则表达式regex、RE
用来判断某个字符串是否符合某一种规则,常用于判断、替换、分割等
元字符
- [abc]:a、b或c
- [a-zA-Z0-9]:表示由字母、数字组成
- \d:表示数字
- \w:表示字母、数字、下划线
- \s:表示所有空白字符(空格、换行等)
- ^:行的开头
- $:行的结尾
- .:任意字符(除换行符)
数量表示
几个常用的正则表达式:
判断是否手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
判断是否为18位身份证号码:^\d{17}[[0-9]X]$
判断汉字:^[\u4e00-\u9fa5]{0,}$
判断英文和数字:^[A-Za-z0-9]+$
判断电子邮箱:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$