Я уже задал вопрос об этом here, поэтому я решил сделать это с нуля еще раз. Я пытаюсь проверить формат dd-MMM-yyyy, но по какой-то причине я всегда получаю сообщение об ошибке.Дата проверки с помощью регулярного выражения
Вот мой код:
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Review1_Main{
private static Pattern DATE_VALIDATION_PATTERN =
Pattern.compile("^(([1-9])|([0][1-9])|([1-2][0-9])|([3][0-1]))" +
"\\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|" +
"Nov|Dec)\\-\\d{4}$");
public static boolean validate(final String date){
Matcher matcher = DATE_VALIDATION_PATTERN.matcher(date);
if(matcher.matches()){
matcher.reset();
if(matcher.find()){
String dd = matcher.group(1);
String mm = matcher.group(2);
int yy = Integer.parseInt(matcher.group(3));
if (dd.equals("31") && (mm.equals("Apr") || mm.equals("Jun") ||
mm.equals("Sep") || mm.equals("Nov"))) {
return false;
} else if (mm.equals("Feb")) {
if(yy % 4==0){
if(dd.equals("30") || dd.equals("31")){
return false;
}else{
return true;
}
}else{
if(dd.equals("29")||dd.equals("30")||dd.equals("31")){
return false;
}else{
return true;
}
}
}else{
return true;
}
}else{
return false;
}
}else{
return false;
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Enter a date: ");
String input = s.nextLine();
System.out.println(validate(input));
}
}
А вот ошибка я получаю:
Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:542)
at java.lang.Integer.parseInt(Integer.java:615)
at Review1_Main.validate(Review1_Main.java:21)
at Review1_Main.main(Review1_Main.java:57)
Я понимаю, что значит эта ошибка, что мой вход = нуль, но я не могу почини это. Любые советы были бы хорошими. Я действительно хочу это понять!
Спасибо!
Наконец нашел ответ:
private static Pattern DATE_VALIDATION_PATTERN = Pattern.compile("(0?[1-9]|[12][0-9]|3[01])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|" +
"Nov|Dec)-((19|20)\\d\\d)");
Зачем нужна ручная проверка? Просто используйте [DateTimeFormatter] (https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) и поймайте исключение. –
@ S.Kadakov Я знаю, что мне не разрешено публиковать мои «задания» здесь, но это то, что мой учитель хочет получить от меня, я уже сделал это с 'DateTimeFormatter' –