Java基础十八(正则表达式 + 日期时间)

1. 正则表达式


1.1 普通字符

字符 描述 示例
abc 匹配 ... 中所有字符 [hlo] 匹配字符串 "hello world" 中所有的 h l o 字母
\^ABC 匹配除了 ... 中所有字符 [hlo] 匹配字符串 "hello world" 中除了 h l o 的所有字母
\^a-z 匹配除了 ... 中所有字符 [hlo] 匹配字符串 "hello world" 中除了 a 到 z 的所有字母
A-Z A-Z 表示一个区间,匹配所有的大写字母 [A-Z] 匹配字符串 "Hello world" 结果为 H

1.2 特殊字符

字符 描述 示例
. 匹配任意单个字符,除了换行符 a.b1.2
* 匹配前一个字符零次或多次 go*glecolou*r
+ 匹配前一个字符一次或多次 go+glecolou+r
? 匹配前一个字符零次或一次 colou?rcol(o)?r
| 表示"或"的意思,用于匹配多个选项中的一个 `apple
\[\] 用于定义字符类,匹配方括号内的任意一个字符 [aeiou][0-9]
() 用于分组,可以改变默认的优先级和应用限定符 (go)+、`(abc
$ 匹配输入字符串的结尾位置,如果设置了 RepExp 对象的 Multiline 属性,则 $ 也匹配'\n'或'\r' ...
{ 标记限定表达式的开始 ...
| 指明两项直接的一个选择 ...

1.3 非打印字符

字符 描述 示例
\n 匹配换行符 Hello\nWorld
\r 匹配回车符 Hello\rWorld
\t 匹配制表符 Hello\tWorld
\v 匹配垂直制表符 Hello\vWorld
\s 匹配任意空白字符,包括空格、制表符、换页符等 Hello World
\S 匹配任意非空白字符,不包括换行 我暂时不知道
\d 匹配任意数字字符,相当于 0-9 123459am
\w 匹配任意字母、数字或下划线字符,相当于 a-zA-Z0-9_ hello_world_123

1.4 限定符

字符 描述 示例
* 匹配前一个字符零次或多次 go*glecolou*r
+ 匹配前一个字符一次或多次 go+glecolou+r
? 匹配前一个字符零次或一次 colou?rcol(o)?r
{n} 匹配前一个字符恰好出现 n 次 go{2}glecolou{3}r
{n,} 匹配前一个字符至少出现 n 次 go{2,}glecolou{3,}r
{n,m} 匹配前一个字符出现 n 到 m 次 go{2,5}glecolou{3,7}r

1.5 定位符

字符 描述 示例
^ 匹配字符串的开头 ^Hello^[A-Z]
$ 匹配字符串的结尾 World$[0-9]$
\b 匹配单词的边界 \btest\b\bword\b
\B 匹配非单词边界 \Btest\B\Bword\B

2. 日期时间


2.1 Date 类方法

Date类位于 java.util 包中,用于表示特定的时间点。

方法 描述
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
toString() 将日期对象转换为字符串形式。
compareTo(Date anotherDate) 比较两个日期的顺序。返回值为 0 表示相等,大于 0 表示当前日期在参数日期之后,小于 0 表示当前日期在参数日期之前。
equals(Object obj) 检查该日期对象是否等于另一个日期对象。
before(Date when) 检查当前日期是否在指定日期之前。
after(Date when) 检查当前日期是否在指定日期之后。
setTime(long time) 设置日期对象的时间值。

例题1

java 复制代码
public class DateDemo01 {
    public static void main(String[] args) {
        // 创建一个表示当前时间的 Date 对象
        Date date = new Date();
        System.out.println(date);   // Thu Aug 24 22:35:10 CST 2023
        // 获取 Date 对象的时间(毫秒数)
        long timeInMillis = date.getTime();
        System.out.println(timeInMillis);  // 1692887710157
        // 创建一个指定时间的 Date 对象
        Date specifiedDate = new Date(1640886000000L);
        System.out.println(specifiedDate);  // Fri Dec 31 01:40:00 CST 2021
        // 比较两个 Date 对象的时间
        boolean isBefore = date.before(specifiedDate);
        boolean isEquals = date.equals(specifiedDate);
        boolean isAfter = date.after(specifiedDate);
        System.out.println(isBefore);  // false
        System.out.println(isEquals);  // false
        System.out.println(isAfter);  // true
    }
}

2.2 Calendar 类方法

Calender 类是 java 中用于处理日期和时间的类,位于 java.util 包中。它提供了一种比 Date 类更灵活和功能更强大的日期和时间操作方式。

方法 描述
getTime() 返回一个表示此 Calendar 时间值(从历元到现在毫秒偏移量)的 Date 对象。
get(int field) 返回给定日历字段的值。
set(int field, int value) 设置给定日历字段的值。
add(int field, int amount) 根据日历的规则,将指定的时间量添加到给定日历字段。
roll(int field, int amount) 根据日历的规则,将给定的时间量添加到给定日历字段,但不更改较大的字段值。
getActualMaximum(int field) 返回指定日历字段的最大值。
getActualMinimum(int field) 返回指定日历字段的最小值。
getDisplayName(int field, int style, Locale locale) 返回给定字段值的本地化表示名称。
getFirstDayOfWeek() 返回一个代表每周的第一天的值。
setFirstDayOfWeek(int value) 设置一星期中的第一天是哪一天。
getMinimum(int field) 返回给定日历字段的最小值。
getMaximum(int field) 返回给定日历字段的最大值。

例题2

java 复制代码
import java.util.Calendar;
import java.util.Date;

public class CalenderDemo01 {
    public static void main(String[] args) {
        // 获取当前时间和日期的 Calender 对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);  // java.util.GregorianCalendar[time=1692889224235,areFieldsSet=true,···]
        // 设置日期为指定的年份、月份和日 1970年2月1日
        calendar.set(1970, 1, 1);
        System.out.println(calendar);  // java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllField···]
        // 获取年份
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);  // 1970
        // 获取月份(月份从 0 开始计数)
        int month = calendar.get(Calendar.MONTH) + 1;
        System.out.println(month);  // 2
        // 获取当前月份中的第几天
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(dayOfMonth);  // 1
        // 月份加 1
        calendar.add(Calendar.MONTH, 1);
        // 输出修改过后的月份
        System.out.println(calendar.getTime());  // Sun Mar 01 23:00:24 CST 1970
        // 将 Calender 转换为 Date 对象
        Date date = calendar.getTime();
        System.out.println(date);  // Sun Mar 01 23:00:24 CST 1970
    }
}

Calender 和 Date 相互转换

java 复制代码
import java.util.Calendar;
import java.util.Date;

public class CalenderDeom02 {
    // 创建一个 Calender 对象
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // 设置日期为指定的日期
        calendar.set(1970, 0, 1);
        // 获取当前的日期和时间
        Date date = calendar.getTime();
        System.out.println(date);  // Thu Jan 01 23:25:45 CST 1970
        // 将 Calender 转换为 Date
        Date convertedDate = calendar.getTime();
        System.out.println(convertedDate);  // Thu Jan 01 23:25:45 CST 1970
        // 创建一个新的 Date 对象
        Date newDate = new Date(70, 1, 1);
        // 将 Date 转换为 Calender 
        Calendar convertedCalender = Calendar.getInstance();
        convertedCalender.setTime(newDate);
        System.out.println(convertedCalender);  // java.util.GregorianCalendar[time=2649600000,areFieldsSet=true,areAllFieldsSet=true...
    }
}

请注意,尽管 Date 类和 Calendar 类仍然存在于 Java 中,但在 Java 8 及更高版本中,推荐使用新版的日期时间类(如 LocalDate、LocalTime、LocalDateTime)来替代旧版的 Date 和 Calendar 类,因为新版的类更加简洁、易用,并且线程安全。

相关推荐
机建狂魔1 分钟前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
山峰哥28 分钟前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
乐观的Terry30 分钟前
11、发布系统-用户认证与权限体系
java·spring boot·spring·spring cloud·mybatis
前端开发张小七30 分钟前
Java 学习笔记 · 第二课:面向对象核心(封装、继承、多态)及接口与异常
java·后端·程序员
wangjialelele37 分钟前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
Awna1 小时前
Golang 大小写可见性规范
开发语言·后端·golang
孙启超1 小时前
【AI应用开发】LangChain 中 Chain 和 Agent 核心区别?
java·人工智能·langchain·llm·rag·ai应用开发·agent loop
leoZ2311 小时前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama
William Dawson1 小时前
【踩坑实录|Hive1\.2\.1数据服务接口5大疑难问题调试与全方位优化方案】
java·hive·spring boot
2601_955759881 小时前
如何识别 Claude API 低价值调用并优化
java