Понимание $ в строках формата Java


 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4s %3s %2s %1s", "a", "b", "c", "d")
 // -> " d  c  b  a"

в этом случае, почему 2 добавляется к $?

4 64

4 ответа:

The 2 не имеет ничего общего с $:

  • % = начало строки формата
  • 4$ = четвертый аргумент ('d')
  • 2 = ширина двух (выравнивание по правому краю)
  • s = тип строка

The 2$ значит поставить второй аргумент из списка здесь. Элемент $следующее число не предшествует ему. Точно так же,4$ означает поставить здесь четвертый аргумент.

чтобы уточнить, мы можем разбить в части:

  • % - указывает, что это формат строки

  • 2$ - показывает, что второй аргумент значения должен быть помещен здесь

  • 2 - формат состоит из двух символов

  • s - отформатируйте значение в виде строки

вы можете найти более подробную информацию документации.

это позиционные аргументы, где %4s сигналы в формате четвертый аргумент в виде строки с шириной 2. Это особенно полезно при предоставлении строк для локализации, где аргументы должны быть переупорядочены, не касаясь исходного кода.

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

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

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

4$ : четвертый параметр значение % : формат строки 2: интервал (длина аргумента) s: его строковый формат

например, следующий фрагмент:

StringBuffer sb=new StringBuffer();

Formatter formatter=new Formatter(sb,Locale.UK);

formatter.format("%4s %3s %2s %1s", "a", "b", "c", "d");

System.out.println(sb);

выход :

//расстояние в 5 символов между двумя символами

    d         c         b           a

и замена 5 на 2, даст следующий результат:

d c b A

видите разницу? :)