Рубріки: Теория

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)

Приветствую, false!

%c Cимвол Unicode
String.format("Любимый д%cм!",о')

Любимый дом!

%d Целое число integer (включая byte, short, int, long, bigint)
String.format("С Новым %d годом! ",2025)

С Новым 2025 годом!

%e Значения с плавающей запятой, научная нотация
String.format("Константа Фейгенбаума -  %e!",  2.502);

Константа Фейгенбаума - 2,502000e+00!

%f Обычное десятичное число
String.format("Число G равно -  %f!", 9.8)

Число G равно - 9.8!

%a Числа с плавающей строкой в шестнадцатеричном виде
String.format("Ускорение равно -  %a!", 9.8);

Ускорение равно - 0x1.399999999999ap3!

%o Целое число (int. byte, short, int, long, BigInteger) в восьмеричном формате
String str = String.format("Возраст ограничения - %o",18);

Возраст ограничения - 22

%n Идентичен символу перевода строки /n
String.format(" Duran %n Duran")

Duran

Duran

%x Целому числу (int. byte, short, BigInteger, int, long), соответствует символ с определенным значением в таблице ASCII
String.format("The upper limit is %x!",25)

The upper limit is 19!

%t Управление преобразованием даты и времени с помощью флага
String.format("The current date is: %tA",new Date())

The current date is Sunday

Вносить коррективы в форматирование можно также задействуя комбинации спецификаторов, которые называются инструкциями.

Формат записи инструкций выглядит следующим образом:

%[аргумент_индекс][флаги][ширина][.точность]спецификатор

Используемые флаги формата

  • - — центрирование относительно левого края;
  • # — изменение отображения (например, перевод в восьмеричный формат);
  • 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: 

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024