Сьогодні ми розберемося з форматуванням текстових та числових виразів у 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:
Google ускладнить процес встановлення мобільних програм на пристрої Android зі сторонніх джерел, в обхід офіційного…
Команда jQuery оновила однойменну JS-бібліотеку до версії 4.0, що є першим великим релізом майже за…
Кіберполіцейські ГУ НП України за процесуального керівництва Офісу Генпрокурора у співпраці з поліцією Німеччини припинили…
CEO Salesforce Марк Беніофф повідомив, що його компанія припинила пошук і найм розробників програмного забезпечення.…
Американська інвестиційна компанія Jefferies Group видалила 10% інвестицій в біткоїн зі свого рекомендованого портфеля. Крістофер…
Google анонсує нову функцію Comments to SQL, яка дає можливість писати SQL-запити природною англійською мовою…