如何检查字符串是否为 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");
}
}
}
您的 ArrayList
有 String
个元素,因此,您需要在循环 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*/}
}
}
我有一个 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");
}
}
}
您的 ArrayList
有 String
个元素,因此,您需要在循环 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*/}
}
}