我正在使用 Android Studio,并且我有一个 date
字符串,它可能是这样的
2018/1/7
2018/10/7
2018/1/30
我想使用正则表达式从中提取年、月和日。
我有这段代码:
int[] getAlarmTimeArray() {
Matcher m = Pattern.compile("(\\d{4})\\/(\\d{1,2})\\/(\\d{1,2})").matcher(date);
return new int[]{
Integer.parseInt(m.group(1)),
Integer.parseInt(m.group(2)),
Integer.parseInt(m.group(3))};
}
这段代码总是产生:
java.lang.IllegalStateException: No successful match so far
我确信传递给函数的 date
是好的,我也尝试了一些其他模式,但没有。
"(\\d{4})\/(\\d{1,2})\/(\\d{1,2})"
"(\\d{4})/(\\d{1,2})/(\\d{1,2})"
我在 regex demo 上尝试了第一个模式它工作正常。
我不太会使用 Regex,所以请帮助我。
你必须使用 find()
if (m.find()) {
return new int[]{
Integer.parseInt(m.group(1)),
Integer.parseInt(m.group(2)),
Integer.parseInt(m.group(3))
};
} else {
//return default value or throw an exception
}
方案二
还有另一种方法,您可以使用拆分,例如:
String date = "2018/1/7";
String[] split = date.split("/");
return new int[]{
Integer.parseInt(split[0]),
Integer.parseInt(split[1]),
Integer.parseInt(split[1])
}
方案三
如果您使用的是 Java 8,您可以使用 java.time图书馆:
String date = "2018/1/7".replaceAll("/(\\d)/(\\d)$", "/0$1/0$2");
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate localDate = LocalDate.parse(date, format);
return new int[]{
localDate.getYear(),
localDate.getMonthValue(),
localDate.getDayOfMonth()
}
或者没有 DateTimeFormatter
你可以使用:
String date = "2018/1/7".replaceAll("/(\\d)/(\\d)$", "-0$1-0$2");
//----------------------------------------------------^---^
LocalDate localDate = LocalDate.parse(date);