Вставка переменных в строки в Java без конкатенации
Быстрый ответ
В Java существуют разные способы вставки переменных в строки. Одним из наиболее простых является использование оператора +
для конкатенации:
String info = "Имя: " + name + ", Возраст: " + age;
В качестве альтернативы можно применить лаконичный и элегантный метод String.format()
, позволяющий вставлять разные значения:
String info = String.format("Имя: %s, Возраст: %d", name, age);
Со введением JDK 15 появился новый метод formatted()
, который применяется непосредственно к строковому литералу:
String info = "Имя: %s, Возраст: %d".formatted(name, age);
Продвинутые техники вставки переменных
Рассмотрим более детально такие методы вставки переменных в строки, как String.format()
, MessageFormat
и функционал библиотеки Apache Commons Text.
Функциональность String.format()
String.format()
отлично справляется с задачей форматирования большого количества переменных и поддерживает сложные шаблоны. Этот метод использует java.util.Formatter
, расширяя возможности форматирования:
// Делаем представление информации о пользователе и его ID ещё более привлекательным!
String userDetails = String.format("Пользователь: %-10s | ID: %05d", userName, userId);
Такой синтаксис облегчает создание таблиц с выравниваемыми по левому краю именами и ID пользователя, дополняемыми нулями до пяти знаков.
Локализация с помощью MessageFormat
java.text.MessageFormat
является идеальным решением для интернационализации, благодаря использованию индексированных заполнителей:
// Не отказывайтесь от программирования из-за того, что вам пришлось изучить новый язык 🌍
MessageFormat.format("{0}, у вас {1} новых сообщений", userName, newMessages);
Использование мощных библиотек
Библиотека Apache Commons Text предлагает инструмент StringSubstitutor
для рекурсивной замены переменных в строках:
Map<String, String> valuesMap = new HashMap<>();
valuesMap.put("user", userName);
valuesMap.put("messageCount", String.valueOf(newMessages));
String templateString = "Привет, ${user}, у вас ${messageCount} новых сообщений.";
StringSubstitutor sub = new StringSubstitutor(valuesMap);
// Готовы ли вы к получению сообщений?
String resolvedString = sub.replace(templateString);
Для использования этой функциональности необходимо подключить зависимость Maven для Apache Commons Text:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Визуализация
Визуализируем процесс вставки переменных в строки как вагоны (🚂)
, к которым присоединяются пассажиры — переменные (👤)
:
String train = 🚂;
int passengerA = 10; // 👤 A с номером билета 10
String passengerB = "Java"; // 👤 B едет в "Java"
train += "Везёт " + passengerA + " пассажиров в " + passengerB + ".";
И начинаем наше путешествие:
🚂 "Везёт 👤 10 пассажиров в Java."
Здесь конкатенация – это процесс добавления новых вагонов к поезду, который перевозит пассажиров к их назначению.
String::formatted() с Java 15+
C появлением Java 15 водрузился новый метод String::formatted()
, облегчивший синтаксис вставки и делающий код более изящным:
Sha256Hash.digest("makeJavaBetterAgain", "Добро пожаловать, %s!".formatted(userName));
Такой код выглядит более чистым и лаконичным.
Полезные материалы
- Примеры форматирования строк в Java: издание 2021 года — DZone — полный набор примеров форматирования строк.
- Метод String format() в Java — javatpoint — обучающие материалы по методу
String.format()
. - StringBuilder (Java Platform SE 8) — официальная документация по использованию
StringBuilder
от компании Oracle. - MessageFormat (Java Platform SE 8) — справочник по использованию
MessageFormat
для международных сообщений. - StringUtils (Apache Commons Lang 3.11 API) — руководство по работе cо строками через
StringUtils
.