Для квалифицированного разработчика Java нет более распространенного способа форматирования строки, чем использование String.format для выполнения строки форматирования, которую вы хотите использовать в своей работе.

Однако с заполнителем %s в строке его действительно не так просто использовать. Это заставляет меня хотеть избавиться от него.

String.format("hi %s. ", "John");

Однажды мне стало любопытно, потому что набирать {} в логах в качестве разделителя очень удобно! Я также должен иметь возможность использовать его напрямую!

Конечно же, пакет slf4j-api предоставляет очень хороший класс форматирования org.slf4j.helpers.MessageFormatter.

Обратите внимание: не используйте неправильный класс, поскольку в JDK есть класс java.text.MessageFormat, его использование может сильно отличаться.

1. Импорт пакета

Поскольку я все еще использую Java 11, я буду использовать 1.x версию slf4j-api.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
</dependency>

2. Использование

Самый быстрый способ использовать инструмент — просмотреть его комментарии, которые, скорее всего, содержат примеры и подробные описания.

Как только мы попадаем в класс MessageFormatter, мы можем увидеть несколько небольших, простых примеров и описаний, которые выделяются.

Символ {} описан в классе как «якорь», заполнитель для параметров.

2.1 Простая замена

С помощью простого правила подстановки для замены одного или нескольких параметров оно уже подходит для большинства повседневных сценариев!

MessageFormatter.format("Hi {}.", "John").getMessage();

# output
Hi john

2.2 Недопустимые заполнители

Обычно вы можете соединять строки с {} символами, например, {a,b,c} строк с буквами в середине, вы можете просто аннулировать заполнители.

MessageFormatter.format("Set {a,b,c} is not equal to {}.", "b,c").getMessage();

# output
Set {a,b,c} is not equal to {b,c}.

2.3 Необработанный вывод