Naraku--正则表达式

任务一:正则表达式

package Test;
import Naraku.*;
import java.util.Calendar;
public class Regular_Expression {
	public static void getDate(int[] d) {
		Calendar Nowdate = Calendar.getInstance();		
		d[0]=Nowdate.get(Calendar.YEAR); 					
		d[1]=Nowdate.get(Calendar.MONTH)+1;			
		d[2]=Nowdate.get(Calendar.DATE);					
		
	}
	
	public static String numToString(int[] d) {
		String now;
		int i;
		now = "" + d[0] +'-';												
		for(i=1;i<3;i++) {
			if(d[i]>=10) 														
				now = now + d[i];
			else																		
				now = now + 0 + d[i];
			if(i==1)															
				now = now + '-';
		}
		return now;																
	}
	public static Boolean Regular(int y,String T) {
		boolean flag;
		String Reg_Exp;
		flag = Nara.isLeapYear(y);							
		if(flag)																
			Reg_Exp = "(([0-9]{4})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[12][0-9]))))";
		else																	
			Reg_Exp = "(([0-9]{4})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|1[0-9]|2[0-8]))))";
		
		return T.matches(Reg_Exp);														
	}	
	public static void main(String[] args) {
	
		String Today;
		int[] date;
		boolean flag;
			
		date = new int[3];
		
		getDate(date);															
		Today = numToString(date);													
		flag = Regular(date[0],Today);								
		
		if (flag)
			System.out.println("Today is:\n"+ Today + "\nMatched Was Successful !");
		else
			System.out.println("Today is:\n"+ Today + "\nMatched Was Failed !");

	}

}

以上是完整代码,看不懂没关系,下面按方法讲解:

首先,我们来看main()方法

	public static void main(String[] args) {
		
		String Today;
		int[] date;
		boolean flag;
		
		date = new int[3];
		
		getDate(date);															
		Today = numToString(date);												
		flag = Regular(date[0],Today);									
		
		if (flag)
			System.out.println("Today is:\n"+ Today + "\nMatched Was Successful !");
		else
			System.out.println("Today is:\n"+ Today + "\nMatched Was Failed !");

	}

L03Today用来存放要匹配的日期
L04date用来存放从系统中读取的年,月,日
L05flag用来判断要匹配的日期与正则表达式是否匹配
L09getDate(date) 这里会调用 getDate() 方法,读取系统的年,月,日,分别存储在date中返回来
L10Today = numToString(date) 这里将上一步中读取的年,月,日按格式写入Today中返回
L11flag = Regular(date[0],Today) 这个方法实现正则表达式和日期的匹配,成功返回true,失败返回false
L13:这里的 if 就是通过匹配的结果来输出是否成功的提示

第二个方法getDate(),作用是读取当前的年,月,日

	public static void getDate(int[] d) {
		Calendar Nowdate = Calendar.getInstance();		
		d[0]=Nowdate.get(Calendar.YEAR); 					
		d[1]=Nowdate.get(Calendar.MONTH)+1;			
		d[2]=Nowdate.get(Calendar.DATE);					
	}

这个方法应该很容易看懂
L02:创建 calendar 对象,这个类可以读取当前系统的日期信息
L03:读取年
L04:读取月
L05:读取日

第三个方法 Today = numToString(date) ,将年,月,日按格式存储

public static String numToString(int[] d) {
		String now;
		int i;
		now = "" + d[0] +'-';												
		for(i=1;i<3;i++) {
			if(d[i]>=10) 														
				now = now + d[i];
			else																		
				now = now + 0 + d[i];
			if(i==1)															
				now = now + '-';
		}
		return now;																
	}

L02now 用来存放转换后的字符串
L04:首先把 d[0] 中的元素放进去,也就是年份,然后再加上 ’ - ’ 用于分别年,月,日
L05:这个循环用于将月,日放入 now 中,鉴于要凑够两位数,所以放入时要区分一下,1-9前面要补零,月份后面也要接 ’ - ’ 用于区分
L13:返回now

最后一个方法 Regular,用来匹配正则表达式和日期

public static Boolean Regular(int y,String T) {
		boolean flag;
		String Reg_Exp;
		flag = Nara.isLeapYear(y);							
		if(flag)																
			Reg_Exp = "(([0-9]{4})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[12][0-9]))))";
		else																	
			Reg_Exp = "(([0-9]{4})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|1[0-9]|2[0-8]))))";
		
		return T.matches(Reg_Exp);														
	}	

L04:这里可以看见我调用了一个方法,这个方法是我自己创建的一个库,还在逐步完善,里面存放常用方法,这里就是调用的判断是否为闰年。
L05:若是闰年,就用第一条正则表达式,允许出现****-02-29的情况,否则第二条,不允许出现该情况
L10:用于正式匹配,将匹配的结果返回 main() 方法

下面附上两个正则表达式的书写根据
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值