Как конвертировать String в Int в Java
Вот несколько способов конвертировать string в int, Java позволяет сделать это используя методы parseInt() и valueOf().Конвертация Java string в int используя Integer.parseInt(String)
parseInt — это статический метод класса Integer, который возвращает объект integer, представляющий указанный String параметр.
Синтаксис:
public static int parseInt(String str) throws NumberFormatException
Или
public static int parseInt(String str, int radix) throws NumberFormatException
Где str — это String, который вам нужно конвертировать, а radix — основание парсируемого числа
Конвертация String в Integer, Java пример используя parseInt()
public class Demo2 {
// конвертация string в int java
public static void main(String args[]) {
String str = "111";
int num1 = Integer.parseInt(str);
System.out.println("parseInt of the String = "
+ num1);
int num2 = Integer.parseInt(str, 2);//двоичное число
System.out.println("parseInt of the String with radix parameter = " + num2);
}
}
Вывод:
parseInt of the String = 111
parseInt of the String with radix parameter = 7
Здесь мы получили 111 в первом варианте и 7 во втором. 7 — это десятичная форма двоичного 111.
Конвертация используя Integer.valueOf(String)
Integer.valueOf(String s) — это Java метод класса Integer. Он возвращает Integer десятичную интерпретацию объекта String, поэтому он используется для конвертации String в Integer.
Синтаксис:
public static Integer valueOf(String str)
Пример Java String в Integer используя метод valueOf:
public class Demo2 {
// java конвертация string в int используя valueOf()
String myString = "578";
int parNum = Integer.valueOf(myString);
System.out.println("Integer from String using valueOf() = " + parNum);
}
}
Вывод:
Integer from String using valueOf() = 578
Конвертация используя метод Integer.decode
Метод Integer.decode — это универсальный инструмент для конвертации строк в целые числа. В отличие от Integer.parseInt, который требует от программиста явно указать числовое основание, decode может автоматически интерпретировать основание входной строки. Он поддерживает:
- Десятичные: Стандартные целые числа с основанием 10.
- Шестнадцатеричные: Строки с префиксом
0xили#. - Восьмеричные: Строки с префиксом
0.
Как Integer.decode обрабатывает различные основания
Метод decode использует префикс строки для определения числового основания:
- Без префикса: Интерпретируется как десятичное число (основание 10).
- Префикс
0xили#: Интерпретируется как шестнадцатеричное число (основание 16). - Префикс
0: Интерпретируется как восьмеричное число (основание 8).
Примеры:
public class IntegerDecodeExample {
public static void main(String[] args) {
String decimalString = "123";
String hexString = "0x7B";
String octalString = "0173";
int decimalValue = Integer.decode(decimalString);
int hexValue = Integer.decode(hexString);
int octalValue = Integer.decode(octalString);
System.out.println("Decimal: " + decimalValue); // Вывод: 123
System.out.println("Hexadecimal: " + hexValue); // Вывод: 123
System.out.println("Octal: " + octalValue); // Вывод: 123
}
}
Обработка исключений, специфичных для Integer.decode
Хотя Integer.decode надежен, неправильные входные данные могут привести к исключениям. Основные исключения включают:
NumberFormatException: Бросается, когда входная строка не является правильным числом (например, "abc").NullPointerException: Бросается, когда входная строка равнаnull.
Пример с обработкой исключений:
public class DecodeExceptionExample {
public static void main(String[] args) {
String invalidString = "xyz";
String nullString = null;
try {
int value = Integer.decode(invalidString);
System.out.println("Value: " + value);
} catch (NumberFormatException e) {
System.out.println("Неправильный числовой формат: " + e.getMessage());
}
try {
int value = Integer.decode(nullString);
System.out.println("Value: " + value);
} catch (NullPointerException e) {
System.out.println("Null ввод: " + e.getMessage());
}
}
}
Когда использовать Integer.decode
Метод decode особенно полезен при работе с входными данными из внешних источников (например, файлы конфигурации или пользовательские входные данные), которые могут быть в различных числовых форматах. Его способность автоматически обрабатывать несколько оснований упрощает код и уменьшает ошибки.
Выбор между Integer и int в Java
Java предоставляет два варианта для представления целочисленных значений: int (примитивный тип) и Integer (класс-обертка). Выбор между ними зависит от нескольких факторов:
- Производительность:
intболее эффективен по памяти и быстрее, поскольку это примитивный тип и не включает накладные расходы объекта. - Возможность null:
Integerможет хранить значенияnull, что делает его полезным в ситуациях, гдеnullпредставляет неинициализированное или отсутствующее значение. - Коллекции:
Integerнеобходим при работе с generic коллекциями, такими какList<Integer>, поскольку примитивы не могут использоваться как параметры типа.
Использование Integer с базами данных и коллекциями
В контексте баз данных Integer часто используется потому что:
- Он позволяет nullable полям представлять отсутствующие или неопределенные значения из базы данных.
- Фреймворки как Hibernate и JPA сопоставляют SQL типы
INTEGERс JavaInteger, обеспечивая совместимость.
При работе с коллекциями, такими как Map<Integer, String>, Integer необходим, поскольку коллекции работают с объектами, а не с примитивными типами.
Поведение кэширования объектов Integer
Java кэширует объекты Integer для значений в диапазоне от -128 до 127. Это означает, что в этом диапазоне объекты Integer переиспользуются, что может влиять на проверки равенства.
Пример:
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // falseПри сравнении объектов Integer используйте .equals() вместо == для обеспечения правильных проверок равенства, особенно для значений за пределами кэшированного диапазона.
Обработка исключений для NumberFormatException
Попытка конвертировать нечисловую строку в целое число используя Integer.parseInt() или Integer.valueOf() может бросить NumberFormatException. Для обеспечения надежности оберните логику конвертации в блок try-catch.
Пример:
public class NumberFormatExample {
public static void main(String[] args) {
String input = "123abc";
try {
int value = Integer.parseInt(input);
System.out.println("Конвертированное значение: " + value);
} catch (NumberFormatException e) {
System.out.println("Неправильный числовой формат: " + input);
}
}
}
Обработка проблем переполнения Integer
При конвертации очень больших строк может произойти переполнение integer, если значение превышает Integer.MAX_VALUE или меньше Integer.MIN_VALUE. Чтобы обработать это, рассмотрите следующее:
Пример:
public class OverflowExample {
public static void main(String[] args) {
String largeNumber = "2147483648"; // Превышает Integer.MAX_VALUE
try {
int value = Integer.parseInt(largeNumber);
System.out.println("Конвертированное значение: " + value);
} catch (NumberFormatException e) {
System.out.println("Обнаружено переполнение: " + largeNumber);
}
}
}Реальные примеры обработки исключений
В реальных приложениях обработка неправильных входных данных критически важна. Ниже приведен пример валидации пользовательского ввода:
import java.util.Scanner;
public class RealWorldExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите целое число: ");
String input = scanner.nextLine();
try {
int value = Integer.parseInt(input);
System.out.println("Вы ввели: " + value);
} catch (NumberFormatException e) {
System.out.println("Неправильный ввод. Пожалуйста, введите правильное целое число.");
}
}
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ