Integer.parseInt: примеры (JAVA)
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
String s = "0xFF";
int v1 = Integer.parseInt(s.substring(2), 16);
int v2 = Integer.decode(s); // автоматически распознает 0x
v1 = 255 v2 = 255
2. Беззнаковый парсинг и представление как long
int raw = Integer.parseUnsignedInt("4294967295");
long asLong = Integer.toUnsignedLong(raw);
System.out.println(asLong);
4294967295
3. Поддержка пользовательских разделителей (например, подчеркиваний)
String s = "1_000_000";
int value = Integer.parseInt(s.replace("_", ""));
System.out.println(value);
1000000
4. Парсинг с безопасной альтернативой (возврат значения по умолчанию)
int safeParse(String s, int def) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return def;
}
}
// пример использования: safeParse("abc", 0) -> 0
(возвращает 0)
5. Использование потоков для массового преобразования
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
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 при возможном переполнении
try {
int n = Integer.parseInt(bigStr);
} catch (NumberFormatException e) {
java.math.BigInteger big = new java.math.BigInteger(bigStr);
// дальнейшая логика для больших чисел
}
// обеспечивает работу с числами больше int
(в зависимости от входа либо int, либо BigInteger)