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

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для работы с именованными заполнителими в Java пользуйтесь классом StringSubstitutor из библиотеки Apache Commons Text:

Java
Скопировать код
import org.apache.commons.text.StringSubstitutor;
import java.util.Map;
import java.util.HashMap;

Map<String, String> values = new HashMap<>();
values.put("user", "Боб");
values.put("action", "пишет код");
String template = "Наш герой, ${user}, в данный момент ${action}.";

String result = new StringSubstitutor(values).replace(template);
System.out.println(result); // Вывод: Наш герой, Боб, в данный момент пишет код.

Добавьте указанную библиотеку к вашему проекту и используйте мапу значений для быстрой подмены в строковом шаблоне.

Кинга Идем в IT: пошаговый план для смены профессии

Преимущества StringSubstitutor

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

Варианты подстановки заполнителей

Возможности MessageFormat

Класс Java MessageFormat позволяет работать с именованными заполнителями без использования сторонних зависимостей:

Java
Скопировать код
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;

Map<String, Object> values = new HashMap<>();
values.put("movie", "Матрица");
values.put("time", 2.5);
String pattern = "Скоро в кинотеатрах: {movie}, длительность – {time} часа.";

MessageFormat format = new MessageFormat(pattern);
String message = format.format(values);
System.out.println(message); // Вывод: Скоро в кинотеатрах: Матрица, длительность – 2.5 часа.

Этот метод подойдет, когда необходимо повторное использование одних и тех же значений или операций с шаблонами строк.

Строим сложные шаблоны с помощью StringTemplate

Для создания более сложных шаблонов и работы со сложными структурами данных используйте библиотеку StringTemplate от ANTLR:

Java
Скопировать код
import org.antlr.stringtemplate.StringTemplate;

StringTemplate template = new StringTemplate(
    "Уважаемый(ая) $name$, вы выиграли $item$! Поздравляем!"
);
template.setAttribute("name", "Джейн");
template.setAttribute("item", "миллион долларов");

String result = template.toString();
System.out.println(result); // Уважаемый(ая) Джейн, вы выиграли миллион долларов! Поздравляем!

Для использования StringTemplate нужно добавить соответствующую библиотеку в ваш проект.

Визуализация

Можно представить использование именованных заполнителей как распределение ролей в театральной пьесе:

Markdown
Скопировать код
Пьеса: "Герой {hero} побеждает злодея {villain} с помощью {weapon}."

Роли:
- {hero}    ➡️  Король Артур
- {villain} ➡️  Черный Рыцарь
- {weapon}  ➡️  Экскалибур

Итоговая реплика:

"Герой Король Артур побеждает злодея Черного Рыцаря с помощью Экскалибура."

Здесь каждый заполнитель связан с конкретным персонажем.

Подстановка заполнителей: Профессиональные рекомендации

Оцениваем инструменты по их масштабности

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

Использование библиотек: Двухлезвийный меч

Библиотеки вроде StringSubstitutor могут существенно упрощать задачу, однако они добавляют дополнительные зависимости, что может повлиять на размер проекта и его совместимость.

Избегание ошибок

Будьте внимательны к правильному составлению ключей и избегайте опечаток в заполнителях. Проводите валидационные проверки и модульные тесты для обеспечения корректности кода.

Как выбрать подходящий инструмент: Быстрая проверка

  • Простота: Оцените удобство API.
  • Функциональность: Учтите дополнительные возможности инструмента.
  • Производительность: Проверьте, не приводит ли использование инструмента к замедлению работы приложения.
  • Поддержка сообществом: Оцените уровень поддержки со стороны разработчиков.

Полезные материалы

  1. MessageFormat (Java SE 11 & JDK 11)
  2. String (Java SE 11 & JDK 11)
  3. StringSubstitutor (Apache Commons Text 1.9 API)
  4. NamedParameterJdbcTemplate (Spring Framework 6.1.3 API)
  5. GitHub – spullara/mustache.java: Реализация mustache.js на Java
  6. Formatter (Java Platform SE 7)