Как преобразовать строку (String) в целое число (int) в Java?
Основной способ: Integer.parseInt()
Самый распространённый и надёжный способ преобразовать строку в целое число — использовать статический метод Integer.parseInt(String s). Он принимает строку и возвращает примитивный тип int. Вот как это работает в вашем примере:
String numberStr = "123";
int number = Integer.parseInt(numberStr);
int result = number + 10; // Теперь result = 133
System.out.println(result); // Выведет: 133
Метод разбирает строку символ за символом, собирая из них число. Если строка содержит корректное целое число (например, "456", "-789", "0"), преобразование пройдёт успешно.
Что делать с некорректными строками?
Если строка не может быть преобразована в число (например, "abc", "12.5" или пустая строка ""), parseInt() выбрасывает исключение NumberFormatException. Чтобы программа не падала, нужно обработать эту ситуацию:
String userInput = "abc";
try {
int value = Integer.parseInt(userInput);
System.out.println("Число: " + value);
} catch (NumberFormatException e) {
System.out.println("Ошибка: строка не является целым числом!");
// Здесь можно запросить новый ввод или задать значение по умолчанию
}
Альтернатива: Integer.valueOf()
Есть ещё метод Integer.valueOf(String s). Он делает почти то же самое, но возвращает объект Integer, а не примитивный int. Благодаря автоупаковке (autoboxing) разница почти незаметна:
String str = "42";
Integer obj = Integer.valueOf(str); // Возвращает Integer
int primitive = obj; // Автоупаковка в int
Разница в производительности минимальна, но valueOf() может кэшировать объекты для чисел от -128 до 127, что экономит память. Для большинства задач оба варианта взаимозаменяемы.
Дополнительные нюансы
- Пробелы: Методы не терпят лишних пробелов. Строка " 123 " вызовет ошибку. Используйте
str.trim()перед преобразованием. - Система счисления:
parseInt()может принимать второй аргумент — основание системы счисления. Например,Integer.parseInt("FF", 16)вернёт 255. - Диапазон: Число должно помещаться в диапазон
int(от -2^31 до 2^31-1). Для больших чисел используйтеLong.parseLong().
Проверка перед преобразованием
Иногда полезно проверить строку заранее, чтобы избежать исключения. Например, можно использовать регулярное выражение:
String str = "123";
if (str.matches("-?\\d+")) { // Проверяет, что строка состоит только из цифр (и опционального минуса)
int number = Integer.parseInt(str);
} else {
System.out.println("Некорректный формат числа");
}
Но помните: даже такая проверка не гарантирует успех (например, строка из 20 цифр пройдёт проверку, но вызовет NumberFormatException из-за переполнения). Самый надёжный способ — всегда использовать try-catch.
Использование Scanner для безопасного ввода
Если вы получаете строку от пользователя (например, из консоли или текстового поля), можно воспользоваться классом Scanner. Он умеет проверять, является ли следующий токен числом, и преобразовывать его:
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
System.out.print("Введите число: ");
if (scanner.hasNextInt()) {
int number = scanner.nextInt();
System.out.println("Вы ввели: " + number);
} else {
System.out.println("Это не целое число!");
String wrongInput = scanner.next(); // Очищаем некорректный ввод
}
Этот подход удобен, когда вы работаете с потоком ввода. hasNextInt() проверяет, можно ли преобразовать следующий токен, и только потом выполняет преобразование. Если проверка не пройдена, программа не падает, а сообщает об ошибке.
Когда использовать?
- Для ввода с клавиатуры —
Scannerс проверкой. - Для строк из файлов или сети —
Integer.parseInt()с обработкой исключений. - Если нужно часто преобразовывать и важна производительность —
parseInt()быстрее, чемScanner.
Оба подхода решают вашу задачу, просто выбирайте подходящий по контексту.