Сьогодні ми розберемося з форматуванням текстових та числових виразів у Java, попрацюємо з Java String format()
, дізнаємося що таке специфікатори, які вони бувають і як ними користуватися.
Основний засіб управління виводиться на екран інформації в Java – клас Formatter
. Останній доданий до складу пакету java.util, де також міститься безліч допоміжних класів та інтерфейсів.
Цей клас дає можливість перетворювати формат даних – числа, рядки, дату, час, а також відображати їх на екрані у зазначеному оформленні.
Клас Formatter
містить метод format()
. Даний метод отримує дані і потім їх перетворює на певний рядковий формат, зберігаючи в об’єкт типу Formatter. Метод format()
також є в класах PrintStream
і PrintWriter
( System.out
статична змінна типу PrintStream
).
Для оформлення виведення використовуються звані специфікатори формату. У виразі попереду стоїть знак %
, після якого йде символ, що вказує на тип аргументу, який потрібно відформатувати.
Щоб зрозуміти, для чого потрібний цей інструмент, уявіть собі завдання, коли потрібно вивести на екран деяку інформацію. Припустимо:
public static void main(String[] args) { String student_surname = "Alex Petrov"; int age = 19; String teacher = "Serge Bond"; int hours = 301; System.out.println("User = {surname: " + student_surname + ", age: " + age + " let, teacher: " + teacher + ", duration_of_the_training: " + hours + " hours.}"); } }
На екрані спостерігаємо:
User = {surname: Alex Petrov, age: 19 let, teacher: Serge Bond, duration_of_the_training: 301 hours.}
Візуально ситуація ще більше утрудняється, коли змінні містять надто «незручні» імена з великою кількістю символів, а також коли необхідно використовувати методи виклику тих чи інших даних:
System.out.println("User = {student_surname: " + user.getStudent_surname() + ", age: " + user.getAge() + " let, teacher: " + user.getTeachers().get(0) + ", duration_of_the_training: " + user.getExtraInformation().getDuration_of_the_training() + " hours.}");
Для вирішення проблеми робимо наступним чином:
String information= String.format("User = {student_surname: %s, age: %d let, teacher: %s, duration_of_the_training: %d hours.}", user.getStudent_surname(), user.getAge(), user.getTeachers().get(0), user.getExtraInformation().getDuration_of_the_training()) System.out.println(information);
Ще наочніший приклад:
<meta charset='utf-8'><pre class="enlighter-clipboard">String s = String.format("a = %d, b = %d, c = %d", 9, 77, 80); System.out.println(s);
У консолі буде виведено текст:
a = 9, b = 77, c = 80
Шаблонні рядки можна використовувати і при створенні умов:
int a = -1, b = 4, c = 3; String shablon_dlya_texta; if (a < 0) shablon_dlya_texta = "Warning! a = %d, b = %d, c = %d"; else shablon_dlya_texta = "a = %d, b = %d, c = %d"; System.out.println(String.format(shablon_dlya_texta, a, b, c) );
Виведення на екран:
Warning! a = -1, b = 4, c = 3
Якщо застосувати в коді специфікатори є верхнім регістром – відображення в консолі також буде використовувати верхній регістр. Наприклад, %s
переведе відповідний рядок до верхнього регістру.
Засіб форматування класу Formatter підтримує найпоширеніші типи Java, такі як byte, BigDecimal та Calendar.
public static void main(String[] args) { double y = 775.0 / 33.0; System.out.println("Sample string without format: " + y); Formatter formatter = new Formatter(); formatter.format("Sample format string: %.2f%n", y); formatter.format("Sample format string: %8.4f%n", y); formatter.format("Sample format string: %16.4f%n", y); System.out.println(formatter); } }
На екрані ми побачимо таке:
Sample string without format: 23.484848484848484
Sample format string: 23,48
Sample format string: 23,4848
Sample format string: 23,4848
Альтернативою методу оформлення виведення даних можуть бути методи System.out.printf()
і System.out.format()
Приклади їх використання:
System.out.printf("Hello - %s! So how's it going %s?", "Jack", "with the sales");
або
System.out.format("Hello - %s! So how's it going %s?", "Jack", "with the sales");
Розглянемо найчастіше вживані специфікатори у таблиці.
Специфікатори | Тип даних | Приклад використання / Результат |
%s | Рядковий тип | String.format("Вітаю %s!","Олег")
|
%b | Всі типи, наведені до boolean. Значення «істинно» якщо не 0, «брехня» якщо 0 | String.format("Вітаю %b!",null)
|
%c | Cимвол Unicode | String.format("Милий д%ім!",о')
|
%d | Ціла кількість integer (включаючи byte, short, int, long, bigint) | String.format("З Новим %d роком! ",2025)
|
%e | Значення з плаваючою комою, наукова нотація | String.format("Константа Фейгенбаума - %e!", 2.502);
|
%f | Звичайне десяткове число | String.format("Число G дорівнює - %f!", 9.8)
|
%a | Числа з плаваючим рядком у шістнадцятковому вигляді | String.format("Прискорення дорівнює - %a!", 9.8);
|
%o | Ціле число (int. byte, short, int, long, BigInteger) у вісімковому форматі | String str = String.format("Вік обмеження - %o",18);
|
%n | Ідентичний символу перекладу рядка /n | String.format(" Duran %n Duran")
|
%x | Цілому числу (int. byte, short, BigInteger, int, long) відповідає символ з певним значенням у таблиці ASCII | String.format("The upper limit is %x!",25)
|
%t | Управління перетворенням дати та часу за допомогою прапора | String.format("The current date is: %tA",new Date())
|
Вносити корективи у форматування можна також за допомогою комбінації специфікаторів, які називаються інструкціями .
Формат запису інструкцій виглядає так:
%[аргумент_індекс][прапори][ширина][.точність]специфікатор
-
— центрування щодо лівого краю;#
— зміна відображення (наприклад, переведення у вісімковий формат);0
— прогалини у числовому значенні заповнюються нулями;«пробіл»
— перед позитивними числами з’являється «пробіл»;+
— перед числами більшими за нуль йде знак «плюс»;,
— числа містять знаки-розділювачі;(
— числа менші нуля поміщаються в дужки. Вирівнювання щодо лівого краю:
String.format("The current date is: %tA",new Date())
Результат:
|Highload Today |
З виведенням перед позитивними числами символу +
:
System.out.println(String.format("|%+44d|", 701));
Відображення в консолі:
| +701|
З завданням ширини поля та максимальним числом символів:
System.out.println(String.format("|%25.8s|", "Highload Today"));
Відображення в консолі:
| Highload|
Пробіл перед позитивним числом:
System.out.println(String.format("|% d|", 877));
Результат:
| 877|
Вивід дати (не забуваємо попередньо імпортувати import java.util.Locale;
):
Date date = new Date(); System.out.printf(Locale.ENGLISH,"%tB %te, %tY",date,date,date);
Вивід:
November 27, 2022
Тепер ви маєте уявлення про те, як працює форматування в Java і можете застосовувати специфікатори та прапори, оформляючи текст та числові вирази.
Для закріплення матеріалу рекомендуємо вам подивитися відеоурок, в якому розповідається про основні прийоми форматування Java:
Більше половини Go i Ruby розробників з досвідом 3+ роки найняли на $5000 або більше.…
Прикордонники недалеко від с. Кучурган Одеської області затримали двох програмістів, які намагалися втекти з України…
Українське Solana-комʼюніті Kumeka Team з 7 травня запускає безплатне навчання блокчейн-розробці — Solana BootCamp. Про…
Туреччина створила спеціальні візи для диджитал-номадів або «цифрових кочівників». Скористатися ними зможуть і українці. Про…
Російська студія NoName Company, вірогідно, вкрала для розробки тактичного шутеру Best in Hell про ПВК…
11 та 12 травня в NAU HUB відбудеться хакатон студенських новацій University Software Bootcamp. Про…