Как подставить значения в строку
Короткий ответ
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.