如何检查字符串是否为 yyyy-yyyy 格式

How to check if a string is of yyyy-yyyy format

我有一个 ArrayList 如下:

dates : [
"1981-1990",
"1971-1980",
"1991-2000"
]

我想执行检查:查看列表中的值是否为年份范围。

EDITED :有时我得到正确的日期格式,如 'yyyy-MM-dd' ,有时是年份范围。我只希望我的功能在两种情况下都能正常工作。如果存在日期或年份范围,它应该将其标识为日期。就这些了

您可以从 java-time api 使用 Year with Year::isBefore 像这样:

String[] ranges = {"1981-1990", "1971-1980", "1991-2000"};
for (String range : ranges) {
    String[] dates = range.split("-");
    if (Year.parse(dates[0]).isBefore(Year.parse(dates[1]))) {
        System.out.println("Correct range");
    } else {
        System.out.println("Wrong range");
    }
}

在你编辑之后,我会在这里使用这个解决方案:

String[] dates = {"1981-1990", "2020-02-25", "1971-1980", "1998-02-25", "1991-2000"};
for (String date : dates) {
    if (date.matches("\d{4}-\d{4}")) {
        String[] split = date.split("-");

        if (Year.parse(split[0]).isBefore(Year.parse(split[1]))) {
            System.out.println("Correct range");
        } else {
            System.out.println("Wrong range");
        }
    } else {
        try {
            LocalDate.parse(date);
            System.out.println("Correct date");
        } catch (DateTimeParseException ex) {
            System.out.println("Wrong date");
        }
    }
}

您的 ArrayListString 个元素,因此,您需要在循环 ArrayList 时为每个元素调用 .split() 方法。 split 方法 returns 一个字符串数组,因此,在生成的数组上检查长度。如果长度是 2,那么你有两年的时间。如果长度是 5,那么你有两个完整的日期。如果长度为 4,则其中一个值是完整日期,另一个是年份。所以,

for (int index = 0; index < myArrayList.size(); index++) {
    String[] items = myArrayList.get(index).split();
    if (items.length == 2) {/*Two years*/}
    else if (items.length == 5) {/*Two full dates*/}
    else if (items.length == 4) {
        if (items[1].length() == 4) {/*The first is a year, the second a full date*/}
        else {/*The first is a full date, the second is a year*/}
    }
}