Java语言学习day 11 - 常用类API使用(日期,随机数,正则表达式)

本文深入讲解Java中日期时间处理,包括Date、SimpleDateFormat、Calendar类的使用,以及随机数生成方法,涵盖Math、Random类和UUID的特性与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 日期

1.1 Date

  • Date类: 日期时间类, 表示年, 月, 日, 小时, 分钟, 秒.

    ​ 注意: 在使用中我们使用:java.util.Date类.

import java.util.Date;

public class DateDemo {
    public static void main(String[] args) {
       Date d = new Date();//得到当前日期
       System.out.println(d);
       //获取日期中的字段(年月日时分秒)
        System.out.println(d.toLocaleString());//本地区域时间风格
    }
}

1.2 SimpleDateFormat

  • SimpleDateFormat: 日期的格式化类
  • 功能:
  1. 格式化: Date类型转换为String类型: String format(Date date).
  2. 解析: String类型转换为Date类型: Date parse(String source).
  3. 简单类型的数据 -> 复杂类型的数据
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        //格式化: 将Date对象转换成String
        //Date对象 --->"2020-08-19 11:26:30"
        Date d = new Date();
        System.out.println(d);
        //SimpleDateFormat类:format
        SimpleDateFormat sdf = new SimpleDateFormat();
        //指定日期的格式
        //M表示月, m表示分钟
        sdf.applyPattern("yyyy-MM-dd hh:mm:ss");
        String sdate = sdf.format(d);
        System.out.println(sdate);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo2 {
    public static void main(String[] args) throws ParseException {
        //日期的解析:String ->Date
        String s = "2020年08月19日 11时44分30秒";
        SimpleDateFormat sdf = new SimpleDateFormat();
        //需要在解析前,指定日期的格式
        //才能从字符串中获取到对应的数据
        sdf.applyPattern("yyyy年MM月dd日 hh时mm分ss秒");
        //一旦出现ParseException异常,那么肯定是指定格式错了
        Date d = sdf.parse(s);
        System.out.println(d);
    }
}

1.3 Calendar

  • Calendar:日历类 : 主要用来对日期做相加减, 重新设置日期时间功能.
  • Calendar本身是一个抽象类, 通过getInstance方法获取对象, 其底层创建的是Calendar的子类对象.
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取到Calendar的子对象
        //通过Cale操作当前日期
        Calendar c =Calendar.getInstance();
        System.out.println(c);
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int date = c.get(Calendar.DATE);
        int hour = c.get(Calendar.HOUR);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        System.out.println(year);
        System.out.println(month);
        System.out.println(date);
        System.out.println(hour);
        System.out.println(minute);
        System.out.println(second);
        //年份设置为2021年
        c.set(Calendar.YEAR, 2021);
        System.out.println(c.get(Calendar.YEAR));
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarDemo2 {
    public static void main(String[] args) throws ParseException {
        //给定一个日期字符串, 找到该前一周的日期
        String endDate = "2020-08-19 14:59:50";
        //需要一个Date, 但是目前只有String
        //String -> Date SimpleDateFormat
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(endDate);
        //结束日期设置为2020-08-19 23:59:59
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.set(Calendar.HOUR_OF_DAY,23);
        c.set(Calendar.MINUTE,59);
        c.set(Calendar.SECOND,59);
        System.out.println(c.getTime());
        //获取到一周前的时间
        c.add(Calendar.SECOND, 1);
        c.add(Calendar.DAY_OF_MONTH,-7);
        System.out.println(c.getTime());
        //得到一个开始时间 2020-08-13 00:00:00
        String beginDate = "2020-08-12 14:59:50";
    }
}

2 随机数

2.1 Math

  • Math定义: Math 类包含用于执行数学运算的方法, 如初等指数、对数、平方根和三角函数等, 该类的方法都是static修饰的.
public class MathDemo {
    public static void main(String[] args) {
        //最大值
        System.out.println(Math.max(99,22));
        //最小值
        System.out.println(Math.min(99,22));
        //生成[0,1)之间的随机小数
        System.out.println(Math.random());
        //生成[0,100)之间的随机整数
        System.out.println((int)(Math.random()*100));
    }
}

2.2 Random

  • Random定义: Random类用于生产一个伪随机数( 通过相同的种子, 产生的随机数是相同的 ), Math类的random方法底层使用的就是Random类的方式.
import java.util.Random;

public class RandomDemo {
    public static void main(String[] args) {
        Random r = new Random();
        //指定[0, 100)之间的随机数
        System.out.println(r.nextInt(100));
        //随机获取A~Z之间的5个字母组成的字符串
        //先生成65-90之间的随机数 0-25之间的随机数
        StringBuilder sb =new StringBuilder(5);
        for (int i=0;i<5;i++){
          sb.append((char)(r.nextInt(26)+65));
        }
        System.out.println(sb);
    }
}

2.3 UUID

  • UUID定义: UUID表示通用唯一标识符 (Universally Unique Identifier) , 其算法通过电脑的网卡、当地时间、随机数等组合而成, 优点是真实的唯一性, 缺点是字符串太长了.
import java.util.UUID;

public class UUIDDemo {
    public static void main(String[] args) {
        //UUID
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);
        //转成toString 拿到前5位
        String suuid = UUID.randomUUID().toString().substring(0,5);
        System.out.println(suuid);
    }
}

3. 正则表达式

  • 正则表达式定义: 正则表达式用来判断某一个字符串是不是符合某一种正确的规则, 在开发中通常用于判断操作、替换操作、分割操作等.

3.1 匹配规则一

在这里插入图片描述

public class REDemo {
    public static void main(String[] args) {
        //校验字符串是否匹配指定的规则
        //正则表达式中需要使用到反斜线\
        //反斜线在java中是转义符
        System.out.println("\"\"");
        System.out.println("1234567S".matches("\\d"));
        //只能匹配一个字符
        //符合ABC中其中一个字符
        System.out.println("A".matches("[ABC]"));
        //除了ABC以为的字母
        System.out.println("S".matches("[^ABC]"));
        //符合a-z A-Z 0-9的字符
        System.out.println("2".matches("[a-zA-Z0-9]"));
        //数字
        System.out.println("2".matches("\\d"));
        //非数字
        System.out.println("2".matches("\\D"));
        //字母,数字,下划线
        System.out.println("_".matches("\\w"));
        //非字母,数字,下划线
        System.out.println("_".matches("\\W"));
        //空白字符
        System.out.println(" ".matches("\\s"));
        //非空白字符
        System.out.println(" ".matches("\\S"));
    }
}

3.2 匹配规则二

在这里插入图片描述

4总结

4.1 StringBuilder的常用方法和作用

StringBuilder常用方法:

  1. append: 追加, 在字符串后面加上,非静态方法.
  2. StringBuilder(int capacity): 指定容量.
  3. StringBuilder deleteCharAt(int index):删除指定索引位置的字符

StringBuilder作用: 解决多个字符串拼接低性能的问题. 特别是在循环中连接字符时.

4.2 如果理解StringBuilder中的容量

StringBuilder容量: 当我们使用StringBuilder的时候,默认容量位16,但是我们不必担心容量不够得问题, 因为当容量不够的时候的会自动扩容,以16的倍数.

4.3 String、StringBuilder、StringBuffer三者的区别

String: 是不可变字符串, 比较适合连接几个字符串的时候.

StringBuilder和StringBuffer: 都是可变的字符串, 本质是一个char[ ].

StringBuilder: 线程不安去, 但是性能比较高.

StringBuffer: 线程安全, 但是性能比较低.

两个都可以用来拼接多个字符串.

4.4 日期和String的相互转换(格式化和解析):SimpleDateFormat

格式化: Date -> String : 使用String format(Date date).

解析: String -> Date : 使用Date parse(String source).

具体使用看代码:

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

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        //格式化: 将Date对象转换成String
        //Date对象 --->"2020-08-19 11:26:30"
        Date d = new Date();
        System.out.println(d);
        //SimpleDateFormat类:format
        SimpleDateFormat sdf = new SimpleDateFormat();
        //指定日期的格式
        //M表示月, m表示分钟
        sdf.applyPattern("yyyy-MM-dd hh:mm:ss");
        String sdate = sdf.format(d);
        System.out.println(sdate);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo2 {
    public static void main(String[] args) throws ParseException {
        //日期的解析:String ->Date
        String s = "2020年08月19日 11时44分30秒";
        SimpleDateFormat sdf = new SimpleDateFormat();
        //需要在解析前,指定日期的格式
        //才能从字符串中获取到对应的数据
        sdf.applyPattern("yyyy年MM月dd日 hh时mm分ss秒");
        //一旦出现ParseException异常,那么肯定是指定格式错了
        Date d = sdf.parse(s);
        System.out.println(d);
    }
}

4.5 如何方便的操作日期中的数据? Calendar中有哪些常用的方法?

对日期数据进行操作我们可以使用Calendar: 日历类, 可以帮我们对日期做相加减, 重新设置日期时间功能.

Calendar:

     //设置的年月日小时分钟秒的值
	 c.setTime(d);
     c.set(Calendar.YEAR,2020);
     c.set(Calendar.MONTH,23);
     c.set(Calendar.DATE,10);
     c.set(Calendar.HOUR_OF_DAY,23);
     c.set(Calendar.MINUTE,59);
     c.set(Calendar.SECOND,59);
	//相加减
     c.add(Calendar.SECOND, 1);
     c.add(Calendar.DAY_OF_MONTH,-1);
	//得到设置的年月日小时分钟秒
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH)+1;
    int date = c.get(Calendar.DATE);
    int hour = c.get(Calendar.HOUR);
    int minute = c.get(Calendar.MINUTE);
    int second = c.get(Calendar.SECOND);

4.6 说说你对正则表达式的理解? 通常用在什么地方?

正则表达式: 是用来判断某个字符串是否满足我们设置的某些规则.

通常用在: 开发中进行判断, 替换操作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值