В этой статье мы обсудим конвертацию String в int (примитивный тип) и типа Object (wrapper) Integer. В Java существует много способов сделать это.

Как конвертировать 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 с Java Integer, обеспечивая совместимость.

При работе с коллекциями, такими как 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("Неправильный ввод. Пожалуйста, введите правильное целое число.");
        }
    }
}