Как преобразовать строку (String) в число (int) в Java?
Основное решение: метод Integer.parseInt()
В Java для преобразования строки в число используется класс-обёртка Integer и его статический метод parseInt(). Вот как это работает:
String numberStr = "123";
int result = Integer.parseInt(numberStr) + 10; // Теперь всё работает!
System.out.println(result); // Вывод: 133
Метод Integer.parseInt() принимает строку и возвращает примитивный тип int. Если строка содержит корректное целое число (цифры, возможно, со знаком минус в начале), преобразование пройдёт успешно.
Что делать, если строка не является числом?
Если передать в parseInt() строку вида "abc" или "123.45", программа выбросит исключение NumberFormatException. Чтобы избежать падения программы, нужно обрабатывать такие ситуации. Есть два основных подхода:
1. Обработка исключения (try-catch)
String userInput = "abc";
try {
int number = Integer.parseInt(userInput);
System.out.println("Число: " + number);
} catch (NumberFormatException e) {
System.out.println("Ошибка: строка не является числом!");
// Здесь можно запросить ввод заново или установить значение по умолчанию
}
2. Проверка с помощью регулярных выражений
String input = "42";
if (input.matches("-?\\d+")) { // Проверяем, что строка состоит только из цифр (возможно, с минусом)
int number = Integer.parseInt(input);
System.out.println("Число: " + number);
} else {
System.out.println("Некорректный ввод");
}
Дополнительные методы
- Integer.valueOf() — возвращает объект
Integer, а не примитив. Работает аналогичноparseInt(), но может быть полезен для коллекций:
Integer obj = Integer.valueOf("456"); // Возвращает Integer, а не int
int primitive = obj; // Автораспаковка работает
int hex = Integer.decode("0xFF"); // 255
int octal = Integer.decode("077"); // 63
Scanner scanner = new Scanner(System.in);
System.out.print("Введите число: ");
if (scanner.hasNextInt()) {
int number = scanner.nextInt();
System.out.println("Вы ввели: " + number);
} else {
System.out.println("Это не целое число!");
}
Важные замечания
Помните, что int в Java имеет ограниченный диапазон: от -2,147,483,648 до 2,147,483,647. Если строка содержит число вне этого диапазона, возникнет исключение. Для больших чисел используйте Long.parseLong() или BigInteger.
Также учитывайте, что пробелы в начале или конце строки вызовут ошибку. Решается это методом trim():
String withSpaces = " 789 ";
int clean = Integer.parseInt(withSpaces.trim()); // Работает
Вот и всё! Теперь вы знаете, как безопасно преобразовывать строки в числа в Java. Главное правило: всегда обрабатывайте возможность исключения, если строка приходит от пользователя или из внешнего источника.
<<Альтернативный подход: Integer.valueOf() и Optional
Метод Integer.valueOf() работает как parseInt(), но возвращает объект Integer. Для более современного стиля можно использовать Optional в сочетании с обработкой исключений:
public static Optional<Integer> tryParseInt(String str) {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
// Использование:
String input = "42";
Optional<Integer> result = tryParseInt(input);
result.ifPresentOrElse(
num -> System.out.println("Число: " + num),
() -> System.out.println("Не число")
);
Для чисел с плавающей точкой
Если нужно преобразовать строку в double или float, используйте аналогичные методы:
String pi = "3.14159";
double d = Double.parseDouble(pi);
float f = Float.parseFloat("2.718f");
Производительность
Для однократного преобразования разница между parseInt() и valueOf() незначительна. Однако valueOf() может кешировать объекты для чисел от -128 до 127, что экономит память при частом использовании. В любом случае, для простых задач используйте Integer.parseInt() — это стандарт де-факто.
Ответов пока нет.
Войдите чтобы оставить ответ