Как преобразовать строку в число в Java

🔥 🚀 Важно для всех, кто работает с Java! 🔥
На JavaRocks ты найдешь уникальные туториалы, практические задачи и редкие книги, которых не найти в свободном доступе. Присоединяйся к нашему Telegram-каналу JavaRocks — стань частью профессионального сообщества!

В этой статье мы обсудим преобразование String в int . В Java есть много способов сделать это.

Как преобразовать String в int

Несколько способов:

C помощью Integer.parseInt(String)

parseInt — в Java используется для получения примитивного типа данных из определенной строки, другими словами – преобразует строку в число.

Синтаксис:

public static int parseInt(String str) throws NumberFormatException
Run Code

Или

public static int parseInt(String str, int radix) throws NumberFormatException
Run Code

Где str это строка, которую нужно преобразовать, и radix это основание системы исчисления числа числа

Преобразование строки в целое число, пример с использованием parseInt()

public class Demo2 {


   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);
   }
}
Run Code

Вывод:

parseInt of the String = 111
parseInt of the String with radix parameter =  7
Run Code

Здесь у нас 111 в первом варианте и 7 во втором. 7 — это десятичная форма двоичного числа 111.

Преобразовать с помощью Integer.valueOf(String)

Integer.valueOf(String s) — метод Java класса Integer. Он возвращает целочисленную интерпретацию объекта String, поэтому он используется для преобразования String в Integer.

Синтаксис:

public static Integer valueOf(String str)

Example Java String to Integer using valueOf method:
public class Demo2 {

       String myString = "578";
       int parNum = Integer.valueOf(myString);
       System.out.println("Integer from String using valueOf() = " + parNum);

   }
}
Run Code

Вывод:

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); // Output: 123
        System.out.println("Hexadecimal: " + hexValue); // Output: 123
        System.out.println("Octal: " + octalValue); // Output: 123
    }
}
Run Code

Обработка исключений, характерных для 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("Invalid number format: " + e.getMessage());
        }

        try {
            int value = Integer.decode(nullString);
            System.out.println("Value: " + value);
        } catch (NullPointerException e) {
            System.out.println("Null input: " + e.getMessage());
        }
    }
}
Run Code

Когда использовать Integer.decode

decode метод особенно полезен при работе с входными данными из внешних источников (например, файлы конфигурации или пользовательские входные данные), которые могут быть в различных числовых форматах.
Видео на английском о преобразовании String to Integer

Выбор между Integer и int в Java

Java предоставляет два варианта представления целочисленных значений: int (примитивный тип) и Integer (класс-обертка). Выбор между ними зависит от нескольких факторов:

  • Производительность: int более эффективно использует память и быстрее, поскольку является примитивным типом
  • Допустимость значений NULL: Integer может хранить null значения, что делает его полезным в ситуациях, когда null представляет неинициализированное или отсутствующее значение.
  • Коллекции: Integer необходимы при работе с универсальными коллекциями, такими как List<Integer>, поскольку примитивы не могут использоваться в качестве параметров типа.

Использование Integer с базами данных и коллекциями

В контексте баз данных Integer часто используется по следующим причинам:

  • Позволяет полям, допускающим значение NULL, представлять ‘отсутствующие’ null значения из базы данных.
  • Такие фреймворки, как Hibernate и JPA, марят(map) INTEGER типы SQL с Java 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
Run Code

При сравнении 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("Converted value: " + value);
        } catch (NumberFormatException e) {
            System.out.println("Invalid number format: " + input);
        }
    }
}
Run Code

Обработка проблем с переполнением Integer

При преобразовании очень больших строк может возникнуть целочисленное переполнение, если значение превышает Integer.MAX_VALUE или меньше Integer.MIN_VALUE. Чтобы справиться с этим:

Пример:

public class OverflowExample {
    public static void main(String[] args) {
        String largeNumber = "2147483648"; // Exceeds Integer.MAX_VALUE

        try {
            int value = Integer.parseInt(largeNumber);
            System.out.println("Converted value: " + value);
        } catch (NumberFormatException e) {
            System.out.println("Overflow detected: " + largeNumber);
        }
    }
}
Run Code

Реальные примеры обработки исключений

В реальных приложениях обработка недопустимых входных данных имеет очень важное значение. Ниже приведен последний полный пример проверки пользовательского ввода:

import java.util.Scanner;

public class RealWorldExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter an integer: ");
        String input = scanner.nextLine();

        try {
            int value = Integer.parseInt(input);
            System.out.println("You entered: " + value);
        } catch (NumberFormatException e) {
            System.out.println("Invalid input. Please enter a valid integer.");
        }
    }
}
Run Code

Перевод статьи «How to convert String to int in Java».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх