Java——正则表达式,Date类,DateFormat类,Calendar类

一、正则表达式

正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。

1、匹配规则

字符:x

含义:代表的是字符x

例如:匹配规则为"a",那么需要匹配的字符串内容就是a”


字符:\\

含义:代表的是反斜线字符'\'

例如:匹配规则为"\\" 那么需要匹配的字符串内容就是\”


字符:\t

含义:制表符

例如:匹配规则为"\t" ,那么对应的效果就是产生一个制表符的空间


字符:\n

含义:换行符

例如:匹配规则为"\n",那么对应的效果就是换行,光标在原有位置的下一行


字符:\r

含义:回车符

例如:匹配规则为"\r" ,那么对应的效果就是回车后的效果,光标来到下一行行首


字符类:[abc]

含义:代表的是字符ab c

例如:匹配规则为"[abc]" ,那么需要匹配的内容就是字符a,或者字符b,或字符c的一个


字符类:[^abc]

含义:代表的是除了ab c以外的任何字符

例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符


字符类:[a-zA-Z]

含义:代表的是a z A Z,两头的字母包括在内

例如:匹配规则为"[a-zA-Z]",那么需要匹配的是一个大写或者小写字母


字符类:[0-9]

含义:代表的是09数字,两头的数字包括在内

例如:匹配规则为"[0-9]",那么需要匹配的是一个数字


字符类:[a-zA-Z_0-9]

含义:代表的字母或者数字或者下划线(即单词字符)

例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线


预定义字符类:.

含义:代表的是任何字符

例如:匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用. 的话,使用匹配规则"\\."来实现


预定义字符类:\d

含义:代表的是09数字,两头的数字包括在内,相当于[0-9]

例如:匹配规则为"\d ",那么需要匹配的是一个数字


预定义字符类:\w

含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]

例如:匹配规则为"\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线


边界匹配器:^

含义:代表的是行的开头

例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号


边界匹配器:$

含义:代表的是行的结尾

例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容以[0-9]这个结束, 相当于右双引号


边界匹配器:\b

含义:代表的是单词边界

例如:匹配规则为"\b[abc]\b" ,那么代表的是字母abc的左右两边需要的是非单词字符([a-zA-Z_0-9])


数量词:X?

含义:代表的是X出现一次或一次也没有

例如:匹配规则为"a?",那么需要匹配的内容是一个字符a,或者一个a都没有


数量词:X*

含义:代表的是X出现零次或多次

例如:匹配规则为"a*" ,那么需要匹配的内容是多个字符a,或者一个a都没有


数量词:X+

含义:代表的是X出现一次或多次

例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a


数量词:X{n}

含义:代表的是X出现恰好n

例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a


数量词:X{n,}

含义:代表的是X出现至少n

例如:匹配规则为"a{5, }",那么需要匹配的内容是最少有5个字符a


数量词:X{n,m}

含义:代表的是X出现至少n 次,但是不超过m

例如:匹配规则为"a{5,8}",那么需要匹配的内容是有5个字符a 8个字符a之间

示例:

1)匹配11位手机号

1[3,4,5,7,8][\\d]{9}

2)匹配邮箱

 [a-zA-Z0-9_]+@[0-9a-z]+(\\.[a-z]+)+

2、正则表达式的常用方法

  • matches:判断字符串是否匹配给定的正则表达式
  • split:根据正则表达式匹配拆分字符串,返回String类型数组
  • replaceAll:替换匹配正则表达式的字符串

示例1:判断邮箱是否匹配

public class re {
    public static void main(String[] args){
        System.out.println(checkTel("123@qq.com"));
    }
    public static boolean checkTel(String str){
        boolean b = str.matches("[a-zA-Z0-9_]+@[0-9a-z]+(\\.[a-z]+)+");
        return b;
    }
}

示例2:192.168.105.27按照点切割字符串

public static void split_3(){
	String ip = "192.168.105.27";
	String[] strArr = ip.split("\\.");
	System.out.println("数组的长度"+strArr.length);
	for(int i = 0 ; i < strArr.length ; i++){
		System.out.println(strArr[i]);
	}
}

示例3:将所有数字替换为#

public static void replaceAll_1(){
	String str = "Hello12345World6789012";
	str = str.replaceAll("[\\d]+", "#");
	System.out.println(str);
}

二、Date类

Unix时间原点:公元1970年1月1日,午夜0:00:00 英国格林威治,时间戳就是0

long time = System.currentTimeMillis();  //获取当前时间戳
System.out.println(time);

1、获取当前操作系统时间

/*
 * Date类空参数构造方法
 * 获取到的是,当前操作系统中的时间和日期
 */
public static void function(){
	Date date = new Date();
	System.out.println(date);
}

结果

Tue Feb 06 20:17:22 CST 2018

2、传递毫秒值,转换成时间对象

/*
 * Date类的long参数的构造方法
 * Date(long ) 表示毫秒值
 * 传递毫秒值,将毫秒值转成对应的日期对象
 */
public static void function_1(){
    Date date = new Date(0);
    System.out.println(date);
}

结果

Thu Jan 01 08:00:00 CST 1970

3、获取时间戳

/*
 *   Date类方法 getTime() 返回值long
 *   返回的是毫秒值
 *   将Date表示的日期,转成毫秒值
 *   日期和毫秒值转换
 */
public static void function_2(){
	Date date = new Date();
	long time = date.getTime();
	System.out.println(time);
}

三、DateFormat

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如SimpleDateFormat)允许进行格式化(也就是日期-> 文本)、解析(文本-> 日期)和标准化。

我们通过这个类可以帮我们完成日期和文本之间的转换

如何对日期格式化
步骤:
1. 创建SimpleDateFormat对象
在类构造方法中,写入字符串的日期格式 (自己定义)
2. SimpleDateFormat调用方法format对日期进行格式化
String format(Date date) 传递日期对象,返回字符串
日期模式:
yyyy 年份
MM 月份
dd 月中的天数
HH 0-23小时
mm 小时中的分钟
ss 秒

示例1:将当前时间对象装换成字符串类型日期

public static void func() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分钟ss秒");
    String date = sdf.format(new Date());   //将当前时间转换成字符串格式
    System.out.println(date);
}

结果:

2018年02月06日 20点32分钟05秒

示例2:将字符串日期转换成时间对象

package cn.x5456.demo1;

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

public class DateDemo {
    public static void main(String[] args) throws Exception {
        func();
    }

    public static void func() throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("1995-5-6");
        System.out.println(date);
    }
}

 结果

Sat May 06 00:00:00 CST 1995

四、Calendar类

Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:

public class CalendarDemo {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		System.out.println(c);
	}
}

结果

java.util.GregorianCalendar[time=1517921059546,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=1,WEEK_OF_YEAR=6,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=37,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=44,SECOND=19,MILLISECOND=546,ZONE_OFFSET=28800000,DST_OFFSET=0]

1、获取年月日

/*
 * Calendar类的get方法 获取日历字段的值 int get(int) 参数int,获取的哪个日历字段 返回值,就表示日历字段的具体数值
 */
public static void funtion() {
	Calendar c = Calendar.getInstance();
	// 获取年份
	int year = c.get(Calendar.YEAR);
	// 获取月份
	int month = c.get(Calendar.MONTH) + 1;
	// 获取天数
	int day = c.get(Calendar.DAY_OF_MONTH);
	System.out.println(year + "年" + month + "月" + day + "日");
}

2、设置年月日

/*
 * Calendar类的set方法 设置日历 set(int field,int value) field 设置的是哪个日历字段 value
 * 设置后的具体数值
 * 
 * set(int year,int month,int day) 传递3个整数的年,月,日
 */
public static void function_1() {
	Calendar c = Calendar.getInstance();
	// 设置,月份,设置到10月分
	// c.set(Calendar.MONTH, 9);

	// 设置年,月,日
	c.set(2099, 4, 1);

	// 获取年份
	int year = c.get(Calendar.YEAR);
	// 获取月份
	int month = c.get(Calendar.MONTH) + 1;
	// 获取天数
	int day = c.get(Calendar.DAY_OF_MONTH);
	System.out.println(year + "年" + month + "月" + day + "日");
}

3、日期的偏移

/*
 * Calendar类方法add 日历的偏移量,
 * 可以指定一个日历中的字段,
 * 进行整数的偏移 add(int field, int value)
 */
public static void function_2() {
	Calendar c = Calendar.getInstance();
	// 让日历中的天数,向后偏移280天
	c.add(Calendar.DAY_OF_MONTH, -280);
	// 获取年份
	int year = c.get(Calendar.YEAR);
	// 获取月份
	int month = c.get(Calendar.MONTH) + 1;
	// 获取天数
	int day = c.get(Calendar.DAY_OF_MONTH);
	System.out.println(year + "年" + month + "月" + day + "日");
}

4、转换成Date对象

/*
 * Calendar类的方法getTime()
 * 把日历对象,转成Date日期对象
 */
public static void function_3(){
	Calendar c = Calendar.getInstance();
	Date date = c.getTime();
	System.out.println(date);
}

示例1:计算出生了多少天

package cn.x5456.demo1;

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

public class DateDemo{
    public static void main(String[] args) throws Exception {
        func();
    }

    public static void func() throws Exception{
        System.out.println("请输入出生日期 格式 YYYY-MM-dd");
        String birthdayString = new Scanner(System.in).next();   // 获取出生日期
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");
        Date birthdayDate = sdf.parse(birthdayString);      // 转换成Date对象
        Date todayDate = new Date();

        long birthdaySecond = birthdayDate.getTime();    // 转换成秒
        long todaySecond = todayDate.getTime();

        long secone = todaySecond-birthdaySecond;

        if(secone < 0){
            System.out.println("还没出生呢");
        }else{
            System.out.println(secone/1000/60/60/24+"天");
        }
    }

}

示例2:判断是否为闰年

package cn.x5456.demo1;

import java.util.Calendar;


public class DateDemo{
    public static void main(String[] args) throws Exception {
        func();
    }

    public static void func(){
        Calendar c = Calendar.getInstance();
        c.set(2088,2,1);    // 2088年3月1日(月:0-11,周:0-6)
        c.add(Calendar.DAY_OF_MONTH,-1);
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
    }

}

 

 

posted @ 2018-02-06 19:36  想54256  阅读(448)  评论(0编辑  收藏  举报