NumberFormatException возникает, когда мы пытаемся превратить строку в число, но в строке есть нецифровые символы (буквы, пробелы, знаки).
В этом материале я разбираю обработку этой ошибки.
Методы типа Integer.parseInt() или Double.parseDouble() ожидают, что в строке будет число.
Если там буквы или другие символы:
String str = "abc";
int num = Integer.parseInt(str); // ❌ NumberFormatExceptionПрограмма падает. Чтобы этого избежать — используем try-catch.
Код:
public static void main(String[] args) {
String str = "abc";
try {
System.out.println(Integer.parseInt(str));
} catch (NumberFormatException e) {
System.out.println("Не число");
}
}Что происходит:
try— пытаемся превратить строкуabcв число- В строке буквы, а не цифры → возникает
NumberFormatException catch (NumberFormatException e)— ловим именно эту ошибку
Вывод:
Не число
Integer.parseInt()— превращает строку вint- Если строка не число →
NumberFormatException - Обработка этой ошибки полезна при вводе данных от пользователя
| Строка | Можно преобразовать в число? |
|---|---|
| "123" | ✅ Да |
| "-456" | ✅ Да |
| "abc" | ❌ Нет (буквы) |
| "12.3" | ❌ Нет (точка — для parseInt; для parseDouble - подойдёт) |
| "12 3" | ❌ Нет (пробел) |
| "" | ❌ Нет (пустая строка) |
NumberFormatException— при ошибке преобразования строки в числоInteger.parseInt()— для целых чиселDouble.parseDouble()— для дробных чисел- Обработка этой ошибки обязательна, если данные приходят от пользователя
⭐ Когда моя программа падает с NumberFormatException, я открываю этот файл и вспоминаю,
что перед преобразованием нужно проверить строку или обработать исключение.