Как обработать исключения, если пользователь ввел число в место букв?

есть метод, который запрашивает у пользователя данные (Имя,Фамилия, Год рождения, Год начала работы) мне надо обработать исключения, если пользователь ввел в место чисел буквы(год рождения и год начало работы) и обработать если ввел буквы вместо чисел. как это правильно сделать? мой код:

public class Employee {
public void readData(){
   Scanner scanner = new Scanner(System.in);
    try {
        System.out.println("Введите дата рождения: ");
        int birthDate = Integer.parseInt(scanner.next());
        System.out.println("Введите начало год работы: ");
        int startWorking = Integer.parseInt(scanner.next());
        if (birthDate > 2021 || startWorking > 2021){
            System.out.println("Are you from future?! ");
            scanner.close();
        }
        if(startWorking - (2021 - birthDate) > birthDate){
            System.out.println("Не коректные данные!");
            scanner.close();
        }
        System.out.println("Введите имя: ");
        String name = scanner.next();
        System.out.println("Введите фамилию:");
        String lastName = scanner.nextLine();
        scanner.close();

    }
    catch (NumberFormatException | InputMismatchException exception){
        System.out.println("Введите коректные данные!");
    }
}

}


Ответы (2 шт):

Автор решения: Zhenyria

Попытайтесь распарсить входную строку при помощи Integer.parseInt(). Если формат строки не будет соответствовать числу, будет выброшена ошибка NumberFormatException. Вы можете перехватить её при помощи try...catch:

try {
    Integer num = Integer.pasrseInt(str);
} catch (NumberFormatException e) {
    // действия по обработке ошибки
}
→ Ссылка
Автор решения: pazukdev

Если при невалидном вводе нужно именно кидать эксепшн, то:

public static void main(String[] args) {
    try (Scanner sc = new Scanner(System.in)) {
        System.out.println("Insert int value");
        printValidValue(sc, "[0-9]+");

        System.out.println("Insert name");
        printValidValue(sc, "[a-zA-Z]+");            
    }
}

static void printValidValue(Scanner sc, String pattern) {
    while (sc.hasNextLine()) {
        try {
            System.out.println("Value accepted: " + sc.next(pattern));
            break;
        } catch (InputMismatchException e) {
            System.out.println("Invalid value");
            sc.nextLine();
        }
    }
}
→ Ссылка