Java String format: работа с ним и примеры
Сегодня мы разберемся с форматированием текстовых и числовых выражений в Java, поработаем с Java String format()
, узнаем что такое спецификаторы, какие они бывают и как ими пользоваться.
Содержание
Класс Formatter и метод 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);
Мы передали в метод формат шаблон, где указали области, куда будем подставлять значения, обозначив их как %s
(когда подставляем строку) и %d
(когда подставляем число).
Примеры с шаблонными строками
Еще более наглядный пример:
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("Любимый д%cм!",о')
|
%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
— пробелы в числовом значении заполняются нулями;«пробел»
— перед положительными числами появляется «пропуск»;+
— перед числами больше нуля идет знак «плюс»;,
— числа содержат знаки-разделители;(
— числа меньше нуля помещаются в скобки.
Примеры использования флагов формата
Выравнивание относительно левого края:
System.out.println(String.format("|%-40s|", "Highload Today"));
Результат:
|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:
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: