Преобразование строки в целое число в Java

Научитесь преобразовывать строку Java в значение int. Обратите внимание, что строка может содержать обычное десятичное значение или другое значение в других основаниях или системах счисления.

1. Использование Integer.parseInt()

1.1 Синтаксис

Integer.parseInt() анализирует строку в знаковое значение int. Этот метод является перегруженным методом со следующими аргументами:

  • строка: строка для анализа.
  • основание системы счисления: основание системы счисления, используемое при анализе.
  • beginIndex: начальный индекс, включительно.
  • endIndex: конечный индекс, эксклюзивный.
public static int parseInt(string) throws NumberFormatException { ... }public static int parseInt(string, int radix) throws NumberFormatException { ... }parseInt(string, int beginIndex, int endIndex, int radix) throws NumberFormatException { ... }

1.2 Пример

В следующей программе Java мы анализируем строку «1001», используя все три вышеупомянутых метода, и проверяем этот вывод.

Assertions.assertEquals(1001, Integer.parseInt("1001"));Assertions.assertEquals(513, Integer.parseInt("1001", 8));Assertions.assertEquals(1001, Integer.parseInt("amount=1001", 7, 11, 10));

1.3. Выдает исключение NumberFormatException

Все три метода выдают исключение NumberFormatException, если:

  • строка аргумента имеет значение null.
  • длина строки аргумента равна нулю, т.е. пустая строка.
  • строка аргумента не является анализируемым целым числом в указанном основании. Основание по умолчанию — 10.
Assertions.assertThrows(NumberFormatException.class,()->{Integer.parseInt(null);});Assertions.assertThrows(NumberFormatException.class,()->{Integer.parseInt("abc");});

2. Использование Integer.valueOf()

Метод Integer.valueOf() очень похож на метод parseInt() – с одним лишь отличием: возвращаемый тип – это тип Integer, а не примитивный int. Фактически, если мы посмотрим на исходный код метода valueOf(), он внутренне вызывает метод parseInt().

Он также перегружен в двух формах. Обратите внимание, что тип возвращаемого значения метода — Integer.

public static Integer valueOf(String s) throws NumberFormatException {...}public static Integer valueOf(String s, int radix) throws NumberFormatException {...}

Оба метода во всех случаях выдают исключение NumberFormatException, аналогично parseInt().

Assertions.assertEquals(1001, Integer.valueOf("1001"));Assertions.assertEquals(513, Integer.valueOf("1001", 8));Assertions.assertThrows(NumberFormatException.class,()->{Integer.valueOf("abc");});

3. Использование Integer.decode()

Integer.decode() — еще один полезный метод для преобразования String в int, но только для десятичных, шестнадцатеричных и восьмеричных чисел. Обратите внимание, что:

  • Десятичные числа должны начинаться с необязательного знака плюс/минус, например +100, -2022, 334, 404.
  • Восьмеричные числа должны начинаться с необязательного знака плюс/минус, а затем суффикса '0'(ноль). Например, +o100, -o2022, o334, 0404.
    • Шестнадцатеричные числа должны начинаться с необязательного знака плюс/минус, а затем суффикса '0x' или '0X'(ноль и X). Например, +0x100, -0x2022, 0x334, 0x404.
    public static Integer decode(String s) throws NumberFormatException

    Давайте рассмотрим пример, чтобы лучше это понять.

    Assertions.assertEquals(100, Integer.decode("+100"));Assertions.assertEquals(64, Integer.decode("+0100"));Assertions.assertEquals(256, Integer.decode("+0x100"));

    4. Заключение

    В этом кратком руководстве по Java мы научились разбирать строку до типа int или Integer. Мы также научились разбирать числа в десятичном, восьмеричном и шестнадцатеричном форматах.

    Исходный код на Github

    Прокрутить вверх