Ошибка 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:» — это реальное значение, вызвавшее сбой. Начинайте диагностику именно с него, а не с кода парсинга.