【Java进阶】学好常用类,code省时省力(二)

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


一、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-f0eae30faf43
  • String 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:表示所有空白字符(空格、换行等)
  • ^:行的开头
  • $:行的结尾
  • .:任意字符(除换行符)
数量表示

image.png

几个常用的正则表达式:

判断是否手机号码:^(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+)*$

猜你喜欢

转载自juejin.im/post/7133238789316542471