/
Программирование
/
Курс Java
/

Форматирование строк

Java: Форматирование строк

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

var firstName = "Joffrey";
var greeting = "Hello";

System.out.println(greeting + ", " + firstName + "!");
// => Hello, Joffrey!

В сложных выражениях по такому коду трудно сразу понять, какой текст получится на выходе. Пробелы, запятые и кавычки начинают мешать восприятию. Даже этот пример требует небольшого усилия, чтобы прочитать итоговую строку.

Поэтому во многих языках есть отдельный способ собрать строку из шаблона и значений. Шаблон задает форму будущей строки, а на места меток подставляются нужные данные. В Java для этого вызывают метод String.format().

var firstName = "Joffrey";
var greeting = "Hello";

System.out.println(String.format("%s, %s!", greeting, firstName));
// => Hello, Joffrey!

Первый аргумент String.format() — это шаблон. Внутри шаблона стоят метки %s, на их места по порядку подставляются остальные аргументы. Первый %s заменяется на greeting, второй на firstName. Метка %s означает, что значение подставляется как строка.

String.format("%s, %s!", greeting, firstName)
               └┬┘  └┬┘
            "Hello"  "Joffrey"  →  "Hello, Joffrey!"

В варианте с шаблоном текст читается целиком. Пробелы, запятые и восклицательный знак видны сразу, а в цепочке из + они тонут среди кавычек.

Метод formatted

У того же действия есть второй вид записи. Метод formatted() вызывают прямо у строки-шаблона через точку, а значения передают в скобках.

var firstName = "Joffrey";
var greeting = "Hello";

System.out.println("%s, %s!".formatted(greeting, firstName));
// => Hello, Joffrey!

Здесь шаблон "%s, %s!" стоит слева от точки, а formatted() подставляет в него аргументы. Результат такой же, как у String.format(). Эти два способа делают одно и то же, выбирают любой по вкусу.

Пример с числом

Метка %s подставляет не только строки. На ее место можно поставить число, и оно само превратится в строку.

var school = "Hexlet";
var year = 2012;

var about = String.format("%s работает с %s года", school, year);
System.out.println(about); // => Hexlet работает с 2012 года

Метод собрал из шаблона и аргументов готовую строку и вернул ее. Результат сохранили в переменную about и вывели на экран.

Почему это удобно

Шаблон выглядит почти так же, как итоговая строка. Видно, где встанут пробелы и знаки препинания, видно, куда подставятся значения. По такому коду проще понять, что получится на выходе. Поэтому в большинстве задач сборку строки по шаблону предпочитают длинной цепочке конкатенаций.

Задание

Соберите приветствие по шаблону. Подставьте в шаблон "Hello, %s!" слово "World" с помощью метода String.format() и выведите результат на экран.

Ожидаемый вывод:

Hello, World!

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются