Триває набір нової групи на курс Enterprise Patterns! Старт курсу 02.12.2024. Реєструйтеся зі знижкою 30% до 31.10.2024!
Дізнатися більше
27.09.2024
8 хвилин читання

Як у Java правильно конвертувати int в String та навпаки

JAVA є строго типізованою мовою програмування. Це означає, що кожна змінна має визначений тип даних, і конвертація між цими ними часто необхідна для виконання різних задач. Одним з найпоширеніших завдань є перетворення числових типів, таких як int, у тектові (String) і навпаки. Ми розглянемо кілька способів досягнення цього, включаючи використання класів Integer, String, StringBuilder, DecimalFormat, Scanner, а також форматування рядків і конкатенацію. Більш поглиблено і детально FoxmindEd зможе навчити вас цьому на курсах програмування. А поки що насолоджуйтесь статтею, та обирайте спосіб, що найбільше підходить для ваших задач. 

🚀 Курс Java Start від Сергія Немчинського зробить ваш старт у Java зрозумілим і швидким! 📆 Тривалість курсу: Середній час проходження – 2-4 тижні.
Записатись на курс

Конвертація int в String

Оператор конкатенації

Певно самий простий спосіб перетворити числове значення в строку, це використання оператора конкатенації “+”. Треба лише додати до числового значення пусту строку. 

public class Main {

   public static void main(String[] args) {

       int number = 789;

       String str = number + "";

       System.out.println("Число як рядок: " + str); // -> Число як рядок: 789

   }

}

Клас Integer

Один із найпоширеніших та найпростіших способів конвертації int у рядок – це використання класу Integer. Цей клас надає статичний метод toString(int value), який приймає значення типу int і повертає його строкове представлення.

public class Main {

   public static void main(String[] args) {

       int number = 123;

      String str = Integer.toString(number);

       System.out.println("Число як рядок: " + str); // -> Число як рядок: 123

   }

}

Клас String

Інший популярний спосіб конвертації значення типу int у рядок  – це використання класу String. Клас String надає статичний метод valueOf(int value), який приймає значення типу int і коневертує його в строку.

public class Main {

   public static void main(String[] args) {

       int number = 456;

       String str = String.valueOf(number);

       System.out.println("Число як рядок: " + str); // -> Число як рядок: 456

   }

}

Класи StringBuilder та StringBuffer

Ще один спосіб – це використовувати класи StringBuilder та StringBuffer. Обидва класи мають метод append(int value), який дозволяє додати числове значення до існуючого рядка. Різниця між StringBuilder та StringBuffer полягає в тому, що останній є синхронізованим і безпечним для використання в багатопотокових додатках, тоді як StringBuilder не є синхронізованим, але забезпечує кращу продуктивність в однопотокових додатках.

public class Main {

   public static void main(String[] args) {

       int number = 789;

       StringBuilder stringBuilder = new StringBuilder();

       stringBuilder.append(number);

       String str = stringBuilder.toString();

       System.out.println("Число як рядок (StringBuilder): " + str); // -> Число як рядок (StringBuilder): 789

       StringBuffer stringBuffer = new StringBuffer();

       stringBuffer.append(number);

       String str2 = stringBuffer.toString();

       System.out.println("Число як рядок (StringBuffer): " + str2); // -> Число як рядок (StringBuffer): 789

   }

}

Проте використання цих класів може бути зайвим для простих задач конвертації, де можна обійтися простішими методами, які ми розглянули вище. 

Клас DecimalFormat

Клас DecimalFormat надає гнучкий спосіб для форматування чисел і їх перетворення в рядки. Це особливо корисно, коли вам потрібно відобразити числові дані у певному форматі, наприклад, з певною кількістю десяткових знаків, з роздільниками тисяч або у вигляді валюти.

Для використання DecimalFormat, спочатку потрібно створити об’єкт цього класу і визначити шаблон форматування. 

Шаблон форматування:

  • #: Число, якщо вона є, інакше нічого. 
  • 0: Число, якщо вона є, інакше 0.
  • ,: Роздільник тисяч.
  • .: Десятковий роздільник.

Приклади шаблонів:

  • “#” — відображає всі числа без десяткових знаків. “1258,25655 -> 1258”
  • “0.00” — відображає число з двома десятковими знаками, додаючи нулі, якщо необхідно. “1258,25655 -> 1258,26” або “1258 -> 1258,00”
  • “#,###” — кома відділяє групи по три числа, починаючи з правого краю числа. “1258256,25655 -> 1 258 256”. В такому форматі “#,##” – це буде розділення по дві числа – “1258256,25655 -> 1 25 82 56”
  • “#.##” — відображає число до двох десяткових знаків без додавання нулів. “1258,25655 -> 11258,26” або  “1258 -> 11258”
public class Main {

   public static void main(String[] args) {

       double number = 1234.5678;

       DecimalFormat decimalFormat = new DecimalFormat("#.##");

       String formattedNumber = decimalFormat.format(number);

       System.out.println("Форматоване число: " + formattedNumber); // -> 1234,57

       number = 1234567;

       decimalFormat = new DecimalFormat("#,###");

       formattedNumber = decimalFormat.format(number);

       System.out.println("Форматоване число: " + formattedNumber); // -> 1 234 567

   }

}

Цей спосіб так само краще використовувати для специфічних задач, коли є важливим використання шаблонів форматування.

Форматування рядків

Для створення складних рядків, що мають декілька змінних, які треба об’єднати в певній послідовності, можна використовувати метод String.format(String format, Object… args). Цей метод дозволяє форматувати рядок за допомогою заданого шаблону. Для конвертації int в String використовується форматуючий специфікатор %d.

public class Main {

   public static void main(String[] args) {

       int userId = 123;

       String userName = "Olga";

       String formattedString = String.format("User ID: %d, Username: %s", userId, userName);

       System.out.println(formattedString); // -> User ID: 123, Username: Olga

   }

}

Метод String.format може бути менш ефективним з точки зору продуктивності в порівнянні з іншими методами, такими як Integer.toString() або String.valueOf(). І якщо вам не потрібно створювати складні рядки, що містять кілька змінних, то краще використовувати більше прості конструкції. 

Конвертація String в int

Конвертація строки в число є дещо більш складною операцією, адже треба впевнитися, що наша строка представляє собою валідне числове значення, бо інакше ми отримаємо помилку. 

Клас Integer

Integer.parseInt(String s)

Метод Integer.parseInt(String s) приймає рядок, що представляє собою число, і повертає його цілочислове значення типу int.

public class Main {

   public static void main(String[] args) {

       String invalidNumberString = "123";

       int number = Integer.parseInt(invalidNumberString);

       System.out.println("Число: " + number); // -> Число: 123

   }

}

Проте що буде, якщо передати невалідне значення, до прикладу “123а!!%”? Ми отримаємо помилку NumberFormatException. Щоб уникнути падіння програми, ми маємо обробите виключення або здійснити перевірку, що числове значення у строці є валідним.

Ми це можемо робити задопомогою try-catch блоку, відловлюючи помилку і роблячи певні дії, до прикладу, вивести на екран, що числове значення передане не вірно: 

public class Main {

   public static void main(String[] args) {

       String invalidNumberString = "123a";

       try {

           int number = Integer.parseInt(invalidNumberString);

           System.out.println("Число: " + number);

       } catch (NumberFormatException e) {

           System.out.println("Невірний формат числа: " + invalidNumberString); // -> Невірний формат числа: 123a

       }

   }

}

Або можна перевірити, чи містить строка необхідне значення за допомогою патерну: 

public class Main {

   public static void main(String[] args) {

       String numberString = "123";

       // Патерн “\\d+” використовується в регулярних виразах для

       // пошуку одного або більше цифрових символів у рядку.

       if (numberString.matches("\\d+")) {

           int number = Integer.parseInt(numberString);

           System.out.println("Числове значення передано вірно: " + number); // Числове значення передано вірно: 123

       } else {

           System.out.println("Невірний формат числа");

       }

   }

}

Завжди або обробляйте помилку, або перевіряйте числове значення в строці до його перетворення в int, щоб запобігти набажаній поведінці програми.

Підпишіться на наш Ютуб-канал! Корисні відео для програмістів чекають на вас! YouTube
Оберіть свій курс програмування! Шлях до кар’єри програміста починається тут! Подивитись

Integer.parseInt(String s, int radix)

Метод Integer.parseInt(String s, int radix) дозволяє конвертувати рядок, який представляє число в будь-якій системі числення (від 2 до 36), у десяткове число (типу int). Цей метод зазвичай використовується для специфічних завдань, тому не будемо заглиблюватися в його деталі. Якщо ви хочете дізнатися більше, рекомендую ознайомитися з цією статтею: Як працює Integer.parseInt.

Integer.valueOf(String s)

Метод Integer.valueOf(String s) конвертує рядок у об’єкт типу Integer. Тобто аналогічно до parseInt, але замість int ми отримаємо Integer. Якщо нам треба отримати примітив – використовуйте parseInt, а для обгортки – valueOf.

public class Main {

   public static void main(String[] args) {

       String numberString = "123";

       try {

           Integer number = Integer.valueOf(numberString);

           System.out.println("Число як об'єкт Integer: " + number); // -> Число як об'єкт Integer: 123

       } catch (NumberFormatException e) {

           System.out.println("Невірний формат числа: " + numberString);

       }

   }

}

Клас DecimalFormat

Метод parse(String source) класу DecimalFormat використовується для перетворення рядка, що представляє числове значення, у об’єкт типу Number. Після цього об’єкт Number можна перетворити у примітивний тип, такий як int, long, float чи double. Шаблони фоорматування та приклади їх використання ми розглянули вище.

public class Main {

   public static void main(String[] args) {

       String numberString = "1234";

       DecimalFormat decimalFormat = new DecimalFormat("#");

       try {

           // Парсинг рядка у об'єкт типу Number

           Number number = decimalFormat.parse(numberString);

           // Конвертація об'єкта Number у примітивний тип int

           int intValue = number.intValue();

           System.out.println("Число як int: " + intValue); // -> Число як int: 1234

       } catch (ParseException e) {

           System.out.println("Невірний формат числа: " + numberString);

       }

   }

}

Аналогічна порада: якщо вам не треба форматувати числове значення, то краще використовувати простіші методи. 

Scanner

Якщо є необхідність читання з потоку, то можна скористатися класом Scanner. Метод nextInt() зчитує наступне ціле число з потоку вводу. Якщо введене значення не є валідним значенням, метод генерує виключення InputMismatchException. Використання метода у випадку читання з файлу є аналогчним.

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner(System.in);

       System.out.print("Введіть ціле число: ");

       try {

           int number = scanner.nextInt();

           System.out.println("Ви ввели число: " + number);

       } catch (InputMismatchException e) {

           System.out.println("Невірний формат вводу, будь ласка, введіть ціле число.");

       } finally {

           scanner.close();

       }

   }

}

Висновок

Розуміння та вміння застосовувати методи конвертації дозволить вам створювати надійні та ефективні додатки, які коректно працюють з числовими та сторовими даними. Завжди пам’ятайте про важливість обробки виключень та валідації введених даних, щоб уникнути помилок і забезпечити стабільність ваших програм. Використовуйте відповідні методи залежно від завдання, щоб забезпечити оптимальну продуктивність і коректність коду.

FAQ
Як конвертувати int у String за допомогою оператора конкатенації?

Додайте до числа порожній рядок: int number = 789; String str = number + "";

Який метод класу Integer дозволяє перетворити int у String?

Використовуйте метод Integer.toString(number); для конвертації.

Чи можна використати клас String для конвертації int у рядок?

Так, метод String.valueOf(number); перетворює int у String.

Як перетворити рядок у int за допомогою Integer?

Метод Integer.parseInt("123"); конвертує рядок у ціле число.

Що робити, якщо рядок не є валідним числом?

Використовуйте блок try-catch для обробки помилки NumberFormatException.

Чи можна перетворити число з потоку введення в int?

Так, за допомогою класу Scanner і методу nextInt().

У вас залишилися запитання про конвертування int в String у Java? Запитуйте в коментарях нижче!

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів