А что, если у вас есть один и тот же параметр несколько раз в 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"