Для тех, у кого такой же вопрос: ОНИ НЕ ТО ЖЕ
для приведенного примера:
%1d to %2d
против %1$d to %2$d
Как поделился Мартин, шаблон формата:
%[argument_index$][flags][width][.precision]conversion
Не помещая $
, регулярное выражение использует %1
, %2
и т. Д. Для следующих аргументов регулярного выражения.
flags
нужны некоторые конкретные значения, поэтому 1
и 2
используются в качестве аргумента width
, который задает минимальная ширина . Если вы продолжите с тем же шаблоном, вы получите что-то вроде:
String.format("Hello: '%1d' '%2d' '%3d' '%4d'", 1, 2, 3, 4);
==> Hello: '1' ' 2' ' 3' ' 4'
Конечно, поскольку используется аргумент width
, число% не будет соответствовать порядку аргументов, как требуется:
String.format("Hello: '%4d' '%3d' '%2d' '%1d'", 1, 2, 3, 4);
==> Hello: ' 1' ' 2' ' 3' '4'