Подтвердить что ты не робот

Понимание строк $в формате 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("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

В этом случае, почему 2 присоединяется к $?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Чтобы уточнить, мы можем разбить формат %2$2s на его части:

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

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

  • 2 - формат длится два символа

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

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

Ответ 3

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

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

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

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

Ответ 4

%: строка формата

4$: четвертый аргумент

2: ширина (длина при печати аргумента)

s: это преобразование строкового аргумента

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

StringBuffer sb=new StringBuffer();

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

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

System.out.println(sb);

производит вывод:

-    d-    c-    b-    a-

(ширина 5 символов на аргумент, дополненная пробелами)

и замена 5 на 2 приведет к следующему выводу:

- d- c- b- a-

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