Повторно использовать параметр в String.format?

136
String hello = "Hello";

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);

hello hello hello hello hello hello 

Требуется ли многократное повторение переменной hello при вызове метода format или существует сокращенная версия, позволяющая указать аргумент один раз для применения ко всем %sтокенам?

Кэри
источник

Ответы:

261

Из документов :

  • Спецификаторы формата для общего, символьного и числового типов имеют следующий синтаксис:

        %[argument_index$][flags][width][.precision]conversion

    Необязательный аргумент arguments_index - это десятичное целое число, указывающее позицию аргумента в списке аргументов. На первый аргумент ссылается "1$", на второй - "2$"и т. Д.

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);
Игнасио Васкес-Абрамс
источник
64

Другой вариант - использовать относительную индексацию : спецификатор формата ссылается на тот же аргумент, что и последний спецификатор формата.

Например:

String.format("%s %<s %<s %<s", "hello")

результаты в hello hello hello hello.

Даниил
источник
12

Вам необходимо использовать индексный аргумент пользователя %[argument_index$]следующим образом:

String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);

Результат: hello hello hello hello hello hello

Ахмад аль-Курди
источник
4

Один из распространенных случаев повторного использования аргумента String.format- разделитель (например, ";"для CSV или вкладка для консоли).

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

Это не желаемый результат. "c"нигде не появляется

Сначала необходимо использовать разделитель (с %s) и использовать только аргумент index ( %2$s) для следующих случаев:

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

Добавлены пробелы для удобства чтения и отладки. Как только формат окажется правильным, пробелы могут быть удалены в текстовом редакторе:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Эрик Думинил
источник