Ошибка java.lang.NumberFormatException: For input string возникает в тот момент, когда метод Integer.parseInt(), Double.parseDouble() или другой метод парсинга получает строку, которую невозможно преобразовать в число. В сообщении исключения после двоеточия всегда указано конкретное проблемное значение — например, For input string: "12,5" или For input string: "abc". Именно этот фрагмент — главная подсказка для диагностики: он показывает, какие данные реально пришли в программу, а не те, которые разработчик ожидал увидеть.
Исключение относится к unchecked-исключениям (наследник IllegalArgumentException), поэтому компилятор не заставляет его обрабатывать, и проблема всплывает только во время выполнения. Чаще всего с ней сталкиваются при чтении пользовательского ввода, парсинге файлов, обработке параметров HTTP-запросов и десериализации JSON. Ниже разберём типовые причины, способы диагностики и надёжные приёмы защиты кода.
Что означает это исключение
Класс NumberFormatException сигнализирует: строка имеет неподходящий формат для преобразования в числовой тип. JVM выбрасывает его из методов семейства parseInt, parseLong, parseDouble, parseFloat, а также из конструкторов и методов valueOf() классов-обёрток Integer, Long, Double и других.
Стек-трейс указывает точную строку кода, где произошёл сбой. Типичный фрагмент выглядит так:
Exception in thread "main" java.lang.NumberFormatException: For input string: "25o"at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:661)
at com.example.Main.main(Main.java:12)
Здесь видно, что проблема — символ «o» вместо нуля в строке "25o". Такие опечатки — частый источник ошибки при ручном вводе данных.
💡Текст после «For input string:» — это реальное значение, вызвавшее сбой. Начинайте диагностику именно с него, а не с кода парсинга.