Avatar ·

Как преобразовать строку (String) в число (int) в Java?

Всем привет! Я только начал изучать Java и столкнулся с проблемой. У меня есть строка, которая содержит число, например, "123". Мне нужно выполнить с этим числом арифметические операции, но компилятор ругается. Вот мой код: ```java String numberStr = "123"; int result = numberStr + 10; // Ошибка! System.out.println(result); ``` Компилятор выдаёт ошибку: "incompatible types: String cannot be converted to int". Я понимаю, что строка и число — это разные типы данных, но как мне получить из строки именно число? В других языках, например в Python, это делается просто функцией int(). Есть ли в Java что-то подобное? Пробовал гуглить, но ответы слишком сложные для новичка. Объясните, пожалуйста, простым языком, как безопасно преобразовать строку в int, и что делать, если в строке окажется не число, а, например, текст "abc"? Заранее спасибо! <<>>

Основное решение: метод 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; // Автораспаковка работает
  • Integer.decode() — умеет обрабатывать строки с префиксами систем счисления (0x — 16-ричная, 0 — 8-ричная):
  • int hex = Integer.decode("0xFF"); // 255
    int octal = Integer.decode("077"); // 63
  • Scanner.nextInt() — если число читается из пользовательского ввода, лучше использовать 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("Это не целое число!");
    }

Важные замечания

Помните, что 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() — это стандарт де-факто.