А что, если у вас есть один и тот же параметр несколько раз в String.format?

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 жетоны?

4 ответа

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

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

        %[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);

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

Например:

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

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

Вам нужно пользовательский индекс аргумент %[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

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

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

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

Вы должны сначала использовать разделитель (с %s) и использовать только индекс аргумента (%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"
Другие вопросы по тегам