Integer.parseInt: примеры (JAVA)

Обзор поведения метода parseInt
Раздел: Парсинг
Integer.parseInt(String s): int

Описание и сигнатуры

Метод Integer.parseInt преобразует строковое представление целого числа в примитивный тип int. Обычно используется при чтении чисел из текстовых источников: форм, файлов, сетевых сообщений и т. п. Существуют две основной перегрузки:

  • public static int parseInt(String s) - парсит строку в десятичной системе;
  • public static int parseInt(String s, int radix) - парсит строку в системе счисления с основанием radix (от 2 до 36).

Ключевые детали поведения:

  • Возвращает примитив int. При входном значении, не вписывающемся в диапазон Integer.MIN_VALUE.. Integer.MAX_VALUE, метод не возвращает обрезанное значение, а выбрасывает NumberFormatException.
  • Строка может содержать знак «+» или «-» в начале. Пробелы не допускаются - требуется предварительный trim(), если их нужно игнорировать.
  • Для radix допустимые значения - от Character.MIN_RADIX (2) до Character.MAX_RADIX (36). Дополнительные префиксы (0x, #, 0) не обрабатываются автоматически в этой версии метода.
  • При некорректном формате, пустой строке, null или неверном основаниi система бросает исключение NumberFormatException (в реализации JDK это одно исключение для таких ошибок).
  • Для работы с беззнаковыми 32‑битными значениями существуют методы Integer.parseUnsignedInt и связанные функции (появились в Java 8).

Короткие примеры

Примеры показывают код и ожидаемый результат.

Пример 1. Обычный десятичный парсинг

String s = "123";
int x = Integer.parseInt(s);
System.out.println(x);
123

Пример 2. Отрицательное число и знак плюс

System.out.println(Integer.parseInt("-42"));
System.out.println(Integer.parseInt("+17"));
-42
17

Пример 3. Парсинг с основанием (шестнадцатеричный)

System.out.println(Integer.parseInt("FF", 16));
255

Пример 4. Некорректный формат

System.out.println(Integer.parseInt("12a"));
Exception in thread "main" java.lang.NumberFormatException: For input string: "12a"

Пример 5. Значение выходит за пределы int

System.out.println(Integer.parseInt("2147483648"));
Exception in thread "main" java.lang.NumberFormatException: For input string: "2147483648"

Похожие инструменты в Java

  • Integer.valueOf(String) - возвращает объект Integer. Полезно при работе с коллекциями; реализует кеширование для значений от -128 до 127.
  • Integer.decode(String) - распознаёт префиксы 0x/0X/# (шестнадцатеричные) и ведёт себя подходяще для строк с ведущим нулём (октальные).
  • Integer.parseUnsignedInt - для беззнаковых интерпретаций 32‑битных чисел; преобразует строки, представляющие значения 0..2^32-1, в int с последующей работой через методы toUnsignedLong/compareUnsigned.
  • Long.parseLong, Short.parseShort, Byte.parseByte - парсинг в другие примитивы с похожим поведением и собственной проверкой диапазона.
  • Утилиты сторонних библиотек, например Ints.tryParse из Guava, возвращают null вместо исключения при ошибке парсинга.

Рекомендации в выборе: если нужен объект и выгодно кеширование - valueOf. Для строк с префиксами - decode. Если требуется без исключений при ошибке - использовать безопасные утилиты типа tryParse или собственную обработку.

Аналоги в других языках

  • PHP: intval() или приведение (int)$s.
    Пример:
    echo intval("123");
    123
    Отличие: в PHP более свободная конверсия (обрезание строки до нецифровых символов в некоторых случаях).
  • JavaScript: parseInt(str, radix) и оператор Number() или унарный +.
    console.log(parseInt('FF', 16));
    console.log(+"123");
    255
    123
    Отличие: parseInt в JS игнорирует начальные пробелы и может брать только начальную числовую часть, возвращая NaN при отсутствии цифр.
  • Python: int(s) или с основанием int(s, base).
    print(int('FF', 16))
    255
    Отличие: бросает ValueError при ошибке; поддерживает основание 2..36 и автоматическое распознавание префиксов через int(s, 0).
  • SQL: CAST/CONVERT, например CAST('123' AS INT). Поведение зависит от СУБД, возможны NULL или ошибка при некорректе.
  • C#: int.Parse(s), int.TryParse(s, out x).
    int v; Console.WriteLine(int.TryParse("123", out v)); Console.WriteLine(v);
    True
    123
    Отличие: TryParse безопаснее, возвращает bool и результат через out-параметр.
  • Lua: tonumber(s).
    print(tonumber("123"))
    123
  • Go: strconv.Atoi(s) и strconv.ParseInt(s, base, bitSize).
    v, err := strconv.Atoi("123")
    fmt.Println(v, err)
    123 <nil>
    Отличие: явное возвращение ошибки вместо исключения.
  • Kotlin: "123".toInt() и безопасный вариант toIntOrNull().
    println("123".toIntOrNull())
    123
    Отличие: удобные расширения для безопасного парсинга в языке.

Типичные ошибки и их проявления

  • Неправильный формат строки: буквы или символы в числе.
    Integer.parseInt("12a");
    java.lang.NumberFormatException: For input string: "12a"
  • Пустая строка или null.
    Integer.parseInt("");
    Integer.parseInt(null);
    java.lang.NumberFormatException: For input string: ""
    java.lang.NumberFormatException: null
  • Выход за диапазон int:
    Integer.parseInt("2147483648");
    java.lang.NumberFormatException: For input string: "2147483648"
  • Неподходящее основание (radix) - значения вне диапазона 2..36 приводят к ошибке.
    Integer.parseInt("10", 1);
    java.lang.NumberFormatException: radix out of range
  • Ожидание автоматического распознавания префиксов (0x, 0) - parseInt их не учитывает; для таких строк лучше Integer.decode.
    Integer.parseInt("0x10");
    java.lang.NumberFormatException: For input string: "0x10"

Изменения в недавних версиях Java

  • В Java 8 добавлены методы для беззнакового парсинга: Integer.parseUnsignedInt и сопутствующие утилиты (toUnsignedLong, сравнение беззнаково и т. п.).
  • Сам Integer.parseInt в современных релизах JDK не претерпевал существенных изменений; поведение и сигнатуры стабильны.

Расширенные и редкие варианты использования

1. Обработка префиксов вручную или через decode

Пример java
String s = "0xFF";
int v1 = Integer.parseInt(s.substring(2), 16);
int v2 = Integer.decode(s); // автоматически распознает 0x
v1 = 255
v2 = 255

2. Беззнаковый парсинг и представление как long

Пример java
int raw = Integer.parseUnsignedInt("4294967295");
long asLong = Integer.toUnsignedLong(raw);
System.out.println(asLong);
4294967295

3. Поддержка пользовательских разделителей (например, подчеркиваний)

Пример java
String s = "1_000_000";
int value = Integer.parseInt(s.replace("_", ""));
System.out.println(value);
1000000

4. Парсинг с безопасной альтернативой (возврат значения по умолчанию)

Пример java
int safeParse(String s, int def) {
    try {
        return Integer.parseInt(s);
    } catch (NumberFormatException e) {
        return def;
    }
}
// пример использования: safeParse("abc", 0) -> 0
(возвращает 0)

5. Использование потоков для массового преобразования

Пример java
String[] arr = {"1","2","3"};
int[] ints = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints));
[1, 2, 3]

6. Парсинг небазовых цифр (национальные цифры) через Character.digit

Пример java
String s = "١٢٣"; // арабские цифры U+0661..U+0663
int val = 0;
for (int i = 0; i < s.length(); i++) {
    int d = Character.digit(s.charAt(i), 10);
    val = val * 10 + d;
}
System.out.println(val);
123

7. Переход на BigInteger при возможном переполнении

Пример java
try {
    int n = Integer.parseInt(bigStr);
} catch (NumberFormatException e) {
    java.math.BigInteger big = new java.math.BigInteger(bigStr);
    // дальнейшая логика для больших чисел
}
// обеспечивает работу с числами больше int
(в зависимости от входа либо int, либо BigInteger)

джава Integer.parseInt function comments

En
Integer.parseInt Преобразует строку в целое число