ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Вставка переменных в строки в Java без конкатенации

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

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

В Java существуют разные способы вставки переменных в строки. Одним из наиболее простых является использование оператора + для конкатенации:

Java
Скопировать код
String info = "Имя: " + name + ", Возраст: " + age;

В качестве альтернативы можно применить лаконичный и элегантный метод String.format(), позволяющий вставлять разные значения:

Java
Скопировать код
String info = String.format("Имя: %s, Возраст: %d", name, age);

Со введением JDK 15 появился новый метод formatted(), который применяется непосредственно к строковому литералу:

Java
Скопировать код
String info = "Имя: %s, Возраст: %d".formatted(name, age);
Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Продвинутые техники вставки переменных

Рассмотрим более детально такие методы вставки переменных в строки, как String.format(), MessageFormat и функционал библиотеки Apache Commons Text.

Функциональность String.format()

String.format() отлично справляется с задачей форматирования большого количества переменных и поддерживает сложные шаблоны. Этот метод использует java.util.Formatter, расширяя возможности форматирования:

Java
Скопировать код
// Делаем представление информации о пользователе и его ID ещё более привлекательным!
String userDetails = String.format("Пользователь: %-10s | ID: %05d", userName, userId);

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

Локализация с помощью MessageFormat

java.text.MessageFormat является идеальным решением для интернационализации, благодаря использованию индексированных заполнителей:

Java
Скопировать код
// Не отказывайтесь от программирования из-за того, что вам пришлось изучить новый язык 🌍
MessageFormat.format("{0}, у вас {1} новых сообщений", userName, newMessages);

Использование мощных библиотек

Библиотека Apache Commons Text предлагает инструмент StringSubstitutor для рекурсивной замены переменных в строках:

Java
Скопировать код
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:

xml
Скопировать код
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.10.0</version>
</dependency>

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

Визуализируем процесс вставки переменных в строки как вагоны (🚂), к которым присоединяются пассажиры — переменные (👤):

Markdown
Скопировать код
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(), облегчивший синтаксис вставки и делающий код более изящным:

Java
Скопировать код
Sha256Hash.digest("makeJavaBetterAgain", "Добро пожаловать, %s!".formatted(userName));

Такой код выглядит более чистым и лаконичным.

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

  1. Примеры форматирования строк в Java: издание 2021 года — DZone — полный набор примеров форматирования строк.
  2. Метод String format() в Java — javatpoint — обучающие материалы по методу String.format().
  3. StringBuilder (Java Platform SE 8) — официальная документация по использованию StringBuilder от компании Oracle.
  4. MessageFormat (Java Platform SE 8) — справочник по использованию MessageFormat для международных сообщений.
  5. StringUtils (Apache Commons Lang 3.11 API) — руководство по работе cо строками через StringUtils.