Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как подставить значения в строку

Короткий ответ

String.format() подставляет значения на место шаблонов: %s — строка, %d — целое число, %.2f — дробное с двумя знаками:

void main() {
    String text = String.format("%s bought %d items for %.2f €", "Anna", 3, 17.5);
    IO.println(text);
}

Результат:

Anna bought 3 items for 17.50 €

Метод formatted

formatted() делает то же самое, но вызывается у самой строки-шаблона:

void main() {
    IO.println("%s is %d years old".formatted("Oleg", 30));
}

Результат:

Oleg is 30 years old

Ширина и выравнивание

Число после % задаёт ширину поля, минус — выравнивание влево. Так получаются ровные таблицы:

void main() {
    IO.println("%-8s|%6s".formatted("Item", "Price"));
    IO.println("%-8s|%6.2f".formatted("Tea", 3.5));
    IO.println("%-8s|%6.2f".formatted("Cake", 12.25));
}

Результат:

Item    | Price
Tea     |  3.50
Cake    | 12.25

Ведущие нули и разделители

Флаг 0 дополняет число нулями, флаг , добавляет разделитель тысяч:

void main() {
    IO.println("%05d".formatted(42));
    IO.println("%,d".formatted(1234567));
}

Результат:

00042
1,234,567

Частая ошибка

Передать значение не того типа. %d принимает только целые числа:

void main() {
    IO.println("%d".formatted(3.5));
}

Результат:

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double

Для дробных используйте %f или %.2f. Учтите, что %f и %,d используют язык системы: на компьютере с русской локалью дробная часть отделяется запятой. Чтобы результат не зависел от компьютера, передайте локаль: String.format(Locale.US, ...).

Функции из этого ответа

  • String.format() — Собирает строку по шаблону с подстановками вроде %s и %d.
  • String.formatted() — Подставляет значения в саму строку как в шаблон — короткая форма String.format().
  • System.out.printf() — Выводит строку по шаблону с подстановками %s, %d, %.2f.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.