Научитесь преобразовывать строку 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. Мы также научились разбирать числа в десятичном, восьмеричном и шестнадцатеричном форматах.