java实现输入年份判断在哪一天(正则表达式待改进)

本文介绍了一个Java程序,用于判断输入的日期是否为闰年,并计算该年份截至输入日期的具体天数。通过正则表达式验证日期格式正确后,程序会解析年月日并根据闰年规则计算天数。
import java.util.Scanner;

public class runYear {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 年份格式:yyyy-mm-dd,
        @SuppressWarnings("resource")
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            String str = scan.nextLine();
            String regex =  "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}";
            if(str.matches(regex)){
                System.out.println(isRunYear(str));
            }else{
                System.out.println("格式错误,请重新输入!");
            }
            
        }
    }

    private static int isRunYear(String yMD) {
        // TODO Auto-generated method stub
        String[] str = yMD.split("\\-");
        int year = Integer.parseInt(str[0]);
        int month = Integer.parseInt(str[1]);
        int day = Integer.parseInt(str[2]);

        System.out.println(year + " "+month +" "+  day);
        int[] runYear = new int[]{31,29,31,30,31,30,31,31,30,31,30,31};
        int[] noRunYear = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
        
        int result = 0;
        if(isN(year)){
            for(int i=0;i<month-1;i++){
                result += runYear[i];
            }
            result += day;
        }else{
            for(int i=0;i<month;i++){
                result += noRunYear[i];
            }
            result += day;
        }
        return result;
    }

    private static boolean isN(int year) {
        // TODO Auto-generated method stub
        if (year % 4 == 0)//年份能用4整除
            return true;
        else
            return false;
    }

}

转载于:https://www.cnblogs.com/lovexz/p/6730812.html

<think>好的,用户之前问了关于App强制版本检查的代码实现,现在他们想了解如何使用正则表达式判断符合“xxxx-mm-dd”格式的日期中的年份出现次数。我需要先确认他们的具体需求。 首先,“xxxx-mm-dd”中的xxxx代表四位数的年份,比如2023-12-31。用户可能想统计在一个文本中这种日期格式出现的次数,或者验证日期格式是否正确,并提取年份出现的次数。需要明确用户的需求到底是验证格式,还是统计年份的出现次数,或者两者都有。 接下来,用户提到的“出现次数”可能有两种情况:一种是统计整个文本中符合该日期格式的字符串出现的次数,另一种是统计每个年份出现的次数。例如,文本中有多少个日期,或者每个年份出现了多少次。需要进一步分析,但根据问题描述,可能更倾向于前者,即统计符合该格式的日期出现的总次数。 然后,我需要设计正则表达式来匹配“xxxx-mm-dd”格式年份是四位数字,月份是01到12,日期是01到31,但需要考虑不同月份的天数差异,比如二月可能有28或29天,但用正则表达式精确处理会比较复杂。用户可能只需要基本的格式验证,比如月份01-12,日期01-31,而不考虑闰年等情况。因此,正则表达式可以相对简单,比如^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$,但用户可能不需要严格的日期校验,只需要格式正确。 另外,用户可能是在处理日志文件或其他文本数据,需要从中提取所有符合该格式的日期,并统计出现次数。这时候需要编写正则表达式匹配这些日期,并用编程语言(如Python、Java等)进行统计。但用户没有指定具体语言,可能需要给出通用的正则表达式和示例代码。 需要注意的是,正则表达式中的分组和捕获,以便提取年份部分。例如,使用(\d{4})-(0\d|1[0-2])-(0[1-9]|[12]\d|3[01])来捕获年、月、日,然后统计年份的出现次数。 用户可能还关心如何避免误匹配,比如其他四位数数字但不是日期的情况,但正则表达式已经通过格式限制减少了这种情况的可能性。另外,是否需要考虑日期分隔符是否为连字符,或者是否允许其他分隔符,但根据问题描述,格式是“xxxx-mm-dd”,所以分隔符固定为连字符。 最后,需要给出示例代码,展示如何用正则表达式匹配并统计次数。例如在Python中使用re.findall查找所有匹配的日期,然后提取年份并统计。或者直接统计整个日期的出现次数,根据用户需求不同,可能需要分别处理。 总结:用户需要正则表达式匹配“xxxx-mm-dd”格式的日期,并统计其出现次数或年份的出现次数。需要提供正则表达式写法,并给出代码示例,说明如何提取和统计。</think>--- ### **一、正则表达式设计思路** 要匹配 `xxxx-mm-dd` 格式的日期并统计年份出现次数,需满足以下规则: 1. **年份(`xxxx`)**:4位数字,范围 `0000-9999`(可根据需求限定具体范围,例如 `1900-2099`) 2. **月份(`mm`)**:`01-12` 3. **日期(`dd`)**:`01-31`(简化校验,不处理闰年等复杂逻辑) --- ### **二、正则表达式** ```regex \b(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b ``` #### **关键部分解析** | 组件 | 说明 | |-------------------|-----------------------------------| | `(\d{4})` | 捕获年份(4位数字) | | `0[1-9]`\|`1[0-2]` | 匹配月份 `01-12` | | `0[1-9]`\|`[12][0-9]`\|`3[01]` | 匹配日期 `01-31` | --- ### **三、代码示例(Python)** #### **1. 验证日期格式并统计出现次数** ```python import re text = """ 事件记录: 2023-05-20:用户注册 2023-12-31:系统维护 2024-02-29:闰年测试(正则不处理闰年逻辑) 2023-13-01:非法月份(不会被匹配) """ # 匹配所有符合格式的日期 pattern = r'\b(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b' dates = re.findall(pattern, text) # 统计总出现次数 total_count = len(dates) print(f"有效日期出现次数:{total_count}次") # 输出:3次 # 统计年份出现次数 year_counter = {} for match in dates: year = match[0] year_counter[year] = year_counter.get(year, 0) + 1 print("年份分布:", year_counter) # 输出:{'2023': 2, '2024': 1} ``` #### **2. 进阶版本(限定年份范围)** 若需限制年份范围(例如 `1900-2099`): ```python pattern = r'\b(19\d{2}|20\d{2})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b' ``` --- ### **四、关键注意事项** 1. **闰年问题**:正则表达式不处理闰年逻辑(如 `2024-02-29` 会被匹配,但 `2023-02-29` 也会通过) 2. **边界值**:月份和日期的格式校验需严格(如 `00-12` 会被排除) 3. **性能优化**:若处理大量文本,建议预编译正则: ```python date_pattern = re.compile(r'\b(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b') dates = date_pattern.findall(text) ``` --- ### **五、流程图** ``` 输入文本 → 正则匹配 → 提取日期 ├─ 无效日期 → 过滤 └─ 有效日期 → 统计年份出现次数 → 输出结果 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值