`

闰年检测Java正则表达式

 
阅读更多
/**
 * 
 */
package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;



/**
 * @author 江进武
 * 2012-12-5
 */

public class Runnian {

	public static void main(String[] args){
		for (int i=1 ;i<9999;i++){
			if((i%4== 0 && i%100!=0) ||( i%100==0 && i%400==0)){
	 	      System.out.print(i+"\t");

	       //	 4	8	12	16	20	24	28	32	36	40	44	48	52	56	60	64	68	72	76	80	84	88	92	96	104	108	112	116	120	124	128	132	136	140	144	148	152	156	160	164	...	
         944	948	952	956	960	964	968	972	976	980	984	988	992	996
			//1004	1008	1012	1016	1020	1024	1028	1032	1036	1040	1044	1048	1052	1056	1060	1064	1068	1072	1076	1080	1084	1088	1092	1096	1104	1108	....
         9976	9980	9984	9988	9992	9996							}
			
		}
		
//思路 按照年份位数用四个表达式组合,世纪年单算

//一位:[48]

//两位:"[13579]6[2468]0[2468]4[2468]8[13579]2"
//突然发现2位的闰年份加上00就是4位的世纪年闰年,只要两位闰  
 //年不重复不遗漏,4位的世纪年闰年就不会重复也不会遗漏
//简化可得"(([13579][26])|([2468][048]))(00)?"

	
		//三位:  104 124 144 164 184 204 204 224  
		//108  128 148 
		//112 132 152
		//116 136 156 176 196 216
		// 120 140 160 180 220  240 	
	//由上分析可得 "[1-9][02468]4" "[1-9][02468]8" [1-9][13579]2 [1-9][13579]6   [1-9][2468]0 ==》 ([1-9][02468][48])|([1-9][13579][26])|([1-9][2468]0)
		
		
		//4位
		
		//[1-9]\\d[02468]4  [1-9]\d[02468]8 [1-9]\d[13579]2 [1-9]\d[13579]6  [1-9]\d[2468]6 ==> ([1-9]\d[02468][48])|([1-9]\d[13579][26]|( [1-9]\d[2468]6))
		

//组合并加上注释
		
		Pattern pattern = Pattern.compile("([48](00)?)|(([13579][26])|([2468][048]))(00)?#两位|([1-9][02468][48])|([1-9][13579][26])|([1-9][2468]0)#三位|([1-9]\\d[02468][48])|([1-9]\\d[2468][0])|([1-9]\\d[13579][26]|)");
//通过java测试发现不正确,有些闰年没有匹配出来,放在正则表达式工具中能够匹配

//去掉注释,并测试是闰年而没有匹配,不是闰年但匹配的。		
 pattern = Pattern.compile("([48](00)?)|(([13579][26])|([2468][048]))(00)?|(([1-9][02468][48])|([1-9][13579][26])|([1-9][2468]0))||([1-9]\\d[02468][48])|([1-9]\\d[2468][0])|([1-9]\\d[13579][26])");
		 
		 System.out.println("");
		System.out.println("test");
		for (int i=1 ;i<10000;i++){
			Matcher m =	pattern.matcher(i+"");
			if((i%4== 0 && i%100!=0) ||( i%100==0 && i%400==0)){
				if(!m.matches()){
					System.out.println(i);
				}
			}
			else{
				if(m.matches()){
					System.out.println(i);
				}
			}
			
		}
		
	} 
//test 后面没有值,说明正确     

//表达式有点长看看能不能简化?仔细一看,原来3位年份和4位年份的表达式只相差了一个\\d  所以继续简化为:
		pattern = Pattern.compile("" +
				"([48](00)?)" +
				"|(([13579][26])|([2468][048]))(00)?" +
				"|([1-9]\\d?[02468][48])|([1-9]\\d?[2468][0])|([1-9]\\d?[13579][26])");       
}
分享到:
评论

相关推荐

    输入日期检测

    5. **正则表达式**:在编程中,可以使用正则表达式来定义并验证日期格式。例如,用于匹配"年-月-日"格式的正则表达式可能是`^\d{4}-\d{2}-\d{2}$`。 6. **编程语言支持**:不同的编程语言提供了内置函数或库来处理...

    DNAsequence java_java_

    2. **正则表达式**:可以用来验证DNA序列的格式是否正确,例如,检查序列是否只包含'A'、'C'、'G'和'T'这些碱基。 3. **数据结构**:DNA序列分析可能会用到数组或列表(ArrayList)来存储序列,也可能用到栈或队列...

    Java开发技术大全(500个源代码).

    leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper.java 小写字母转换成大写字母 lozengeStar.java 输出一个由*组成的菱形 multiplyTable.java 求乘法口诀表 narrowingConversion_1.java 缩减转换引发...

    Java开发技术大全 电子版

    13.7.3正则表达式中的一些高级规则421 13.7.4正则表达式中的其他通用规则424 13.7.5使用技巧425 13.8Pattern类的使用426 13.9Matcher类的使用428 13.9.1匹配方法的使用429 13.9.2替换方法的使用430 13.9.3组...

    java范例开发大全源代码

     实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符串缓存类 143  实例107 提取单个字符 144  实例108 给指定字符赋值 145  实例109 插入新的...

    Java范例开发大全 (源程序)

     实例105 使用正则表达式验证电话号码的格式 141  6.2 字符串缓存类StringBuffer 143  实例106 创建字符串缓存类 143  实例107 提取单个字符 144  实例108 给指定字符赋值 145  实例109 插入新的字符 146...

    java范例开发大全

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...

    Java练习题,实用于Java大部分人群

    - 使用正则表达式或循环来逐个字符检查。 #### 45. 素数判断 - **知识点**:判断一个数是否为素数。 - **实现方法**: - 检查该数是否能被2到根号n之间的任何数整除。 #### 46. 字符串反转 - **知识点**:反转...

    Java范例开发大全(全书源程序)

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 ...

    java范例开发大全(pdf&源码)

    实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...

Global site tag (gtag.js) - Google Analytics