Как проверить, является ли пользовательский ввод простым текстом или датой в java - PullRequest
0 голосов
/ 08 января 2020

У меня есть приведенный ниже код java, он работает, если пользователь вводит дату указанного формата, например, 2011-11-11, но происходит сбой программы, когда пользователь вводит простой текст, например, «привет», «да». Код сравнивает дату ввода пользователя с текущей датой и выполняет действие. Как проверить, чтобы убедиться, что пользователь вводит дату, а не обычный текст, прежде чем программа сможет продолжить. Вот код:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println("Enter valid date e.g yyyy-mm-dd: ");
String date = sn.next();
LocalDate startDate = LocalDate.parse(date, formatter); //I don't want the program to accept 'startDate' as test, it should be date of specified förmat before jumping to try and catch.
LocalDateTime lt = LocalDateTime.now();
LocalDate currentDate = lt.toLocalDate(); // for type match, I removed time stamp from the localdatetime
try {
    for (obj result : list) {
        if (startDate.isBefore(currentDate)) {
            System.out.println(result);
        } else {
            System.out.println("");
        } 
   }
} catch (DateTimeException e) {
    System.out.println ( "ERROR: " + e );
}

Ответы [ 3 ]

3 голосов
/ 08 января 2020

Вы можете использовать регулярные выражения для ввода даты. Затем преобразовать строку в дату. См. Пример кода:

System.out.print("Please enter Date: ");
String date = console.nextLine();
while(!date.matches("([0-9]{2})\\([0-9]{2})\\([0-9]{4})")) {
    System.out.println("Please enter correct date format");
    date = console.nextLine();
}

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse(date, formatter);

Существует множество способов преобразования строки в дату, которые можно использовать любым из способов. см. эту ссылку для справки ( Преобразование строки в дату с использованием java8 )

3 голосов
/ 08 января 2020

Вы можете перехватить исключение DateTimeParseException (которое генерируется в случае неверной даты) в al oop.

LocalDate startDate = null;

while(true) {
    System.out.println("Enter valid date e.g yyyy-mm-dd: ");
    String date = sn.next();
    try {
        startDate = LocalDate.parse(date, formatter);
        break;
    } catch(DateTimeParseException ex) {
        System.out.println("Invalid date entered!");
    }
}
1 голос
/ 08 января 2020

Trap DateTimeParseException

Окружите ваш вызов на LocalDate.parse с помощью try-catch , чтобы перехватить для DateTimeParseException, брошенного при обнаружении неверного ввода текста ,

try{
    ld = LocalDate.parse( input ) ;
} catch ( DateTimeParseException e ) {
    … handle bad input from user
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...