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: Неекранований символ відсотка.
Щоб вивести символ %, використовуйте %%, інакше форматування завершиться помилкою.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ