Обычная рекомендация заключается не в том, чтобы использовать регулярное выражение для проверки строки даты, но использовать формат времени даты из стандартной библиотеки. В вашем случае это может быть не обязательно, но я хотел бы представить его как вариант как для вас, так и для тех, кто читает.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.uu, H:mm");
String[] lines = {
"12.04.18, 15:59 - A: xyz",
"12345 abc",
"12.04.18, 16:00 - B: cde",
"abc 12345"
};
for (String line : lines) {
ParsePosition pos = new ParsePosition(0);
try {
LocalDateTime dateTime = LocalDateTime.from(formatter.parse(line, pos));
System.out.println("Match. Date-time is " + dateTime
+ ". Remainder of line is: " + line.substring(pos.getIndex()));
} catch (DateTimeParseException dtpe) {
System.out.println("No match. Line was: " + line);
}
}
Вышеприведенный фрагмент печатает:
Match. Date-time is 2018-04-12T15:59. Remainder of line is: - A: xyz
No match. Line was: 12345 abc
Match. Date-time is 2018-04-12T16:00. Remainder of line is: - B: cde
No match. Line was: abc 12345
Потенциальные преимущества:
- Это дает более строгую проверку того, что числа составляют действительную дату и время.
- Это яснее из кода, на который проверяются дата-время. Регулярные выражения немного сложнее читать и писать правильно.
- Вы получаете дату и время в качестве объекта с датой, который будет удобен для дальнейшей обработки, если вам понадобится.