JavaRush /Курси /JAVA 25 SELF /Форматування рядків

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

JAVA 25 SELF
Рівень 9 , Лекція 2
Відкрита

1. Проблема ручної конкатенації

Якщо потрібно вивести одну-дві змінні, оператор + справді зручний. Але коли даних багато, конкатенація швидко перетворюється на хаос, особливо якщо потрібно форматування чисел (наприклад, два знаки після коми) або перенесення рядка.

String name = "Олег";
int age = 25;
double balance = 12345.67;

System.out.println("Імʼя: " + name + ", вік: " + age + ", баланс: " + balance + " євро.");

Спроба доопрацювати форматування всередині конкатенації лише погіршує читабельність:

System.out.println("Імʼя: " + name + ", вік: " + age + ", баланс: " + String.format("%.2f", balance) + " євро.");

Висновок: проста конкатенація підходить для дрібниць, але для складних повідомлень потрібен потужніший інструмент — String.format().

2. String.format — професійне форматування рядків

Метод String.format() дозволяє створювати рядок за шаблоном і підставляти значення у задані позиції.

Загальний вигляд:

String result = String.format("Шаблон", значення);
  • %s — рядок
  • %d — ціле число
  • %f — число з плаваючою комою
  • %n — перенесення рядка (незалежно від платформи)
String name = "Олег";
int age = 25;
double balance = 12345.6789;

String info = String.format("Імʼя: %s, вік: %d, баланс: %.2f євро.", name, age, balance);
System.out.println(info);
// Виведе: Імʼя: Олег, вік: 25, баланс: 12345.68 євро.

String result = String.format("Імʼя: %s, вік: %d, баланс: %.2f євро", name, age, balance);
// %s — рядок, %d — ціле, %.2f — число з 2 знаками після коми

Форматування чисел і рядків

Дробові числа з фіксованою точністю:

double price = 99.999;
System.out.println(String.format("Ціна: %.2f євро.", price)); // Ціна: 100.00 євро.

Ширина поля та вирівнювання:

int n = 7;
System.out.println(String.format("Число: [%5d]", n));   // Число: [    7]
System.out.println(String.format("Число: [%-5d]", n));  // Число: [7    ]

[5d] — ширина поля 5, вирівнювання праворуч за замовчуванням;
[-5d] — ширина поля 5, вирівнювання ліворуч.

Рядки з вирівнюванням:

String text = "Java";
System.out.println(String.format("[%10s]", text));  // [      Java]
System.out.println(String.format("[%-10s]", text)); // [Java      ]

Відсотки:

double percent = 0.125;
System.out.println(String.format("Готово: %.1f%%", percent * 100)); // Готово: 12.5%

Щоб вивести символ відсотка, використовуйте %%.

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

import java.util.Date;
Date now = new Date();
System.out.println(String.format("Сьогодні: %tD", now)); // Сьогодні: 06/18/24
System.out.println(String.format("Час: %tT", now));   // Час: 15:42:07

Локалізація й розділювачі

За замовчуванням використовується локаль системи. Щоб задати власну локаль (наприклад, кому як розділювач дробової частини), передайте локаль — як-от Locale.FRANCE.

import java.util.Locale;
double price = 1234.56;
System.out.println(String.format(Locale.FRANCE, "%.2f", price)); // 1234,56

Практичні приклади

Приклад 1: Короткий звіт

String name = "Анна";
int tasks = 5;
double hours = 12.3456;

String report = String.format(
    "Співробітник: %s%nВиконано завдань: %d%nВитрачено годин: %.1f",
    name, tasks, hours
);
System.out.println(report);

/* Виведення:
Співробітник: Анна
Виконано завдань: 5
Витрачено годин: 12.3
*/

Приклад 2: Таблиця з вирівнюванням

String header = String.format("%-10s | %5s | %8s", "Імʼя", "Бали", "Час");
String row1 = String.format("%-10s | %5d | %8.2f", "Олег", 95, 10.5);
String row2 = String.format("%-10s | %5d | %8.2f", "Анна", 100, 9.75);

System.out.println(header);
System.out.println(row1);
System.out.println(row2);

/* Виведення:
Імʼя        | Бали |    Час
Олег       |    95 |    10.50
Анна       |   100 |     9.75
*/

Приклад 3: Змішаний текст

int apples = 12;
int pears = 8;
System.out.println(String.format("У мене %d яблук і %d груш.", apples, pears));

3. Практика: форматування рядків у нашому застосунку

Додамо форматування до консольного застосунку: баланс завжди з двома знаками після коми, перенесення — через %n.

Scanner console = new Scanner(System.in);

System.out.print("Введіть імʼя: ");
String name = console.nextLine();

System.out.print("Введіть вік: ");
int age = console.nextInt();

System.out.print("Введіть баланс: ");
double balance = console.nextDouble();

// Форматоване виведення
String info = String.format("Імʼя: %s, вік: %d, баланс: %.2f євро.", name, age, balance);
System.out.println(info);

Спробуйте:

  • Вводьте різні значення і перевірте, що баланс завжди виводиться з двома знаками після коми (%.2f).
  • Змініть шаблон, щоб додати перенесення рядків за допомогою %n.

4. Типові помилки під час форматування рядків

Помилка № 1: Невідповідність типів і специфікаторів.
Не можна підставляти рядок у %d або число в %s.

String.format("Вік: %d", "двадцять"); // Помилка: очікувалося число, передано рядок

Помилка № 2: Переплутали порядок аргументів.
Шаблон %s %d, а передали спочатку число, потім рядок — отримаєте помилку або некоректне виведення.

Помилка № 3: Ігнорування локалі.
Очікували, що роздільником дробової частини буде кома, а бачите крапку — задайте потрібну локаль явно через перший параметр String.format(...).

Помилка № 4: Неекранований символ відсотка.
Щоб вивести символ %, використовуйте %%, інакше форматування завершиться помилкою.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ