Что делает знак доллара ($) в строке формата printf?

Я пытаюсь форматировать в java, используя инструкцию printf, как на этой веб-странице: Нажмите здесь. Но я просто не могу понять, какова цель знака $. Может кто-нибудь, пожалуйста, объясните мне это?

Input:

java 100
cpp 65
python 50

Ожидаемый результат: (вместо пробела должно быть пробел)

 ================================
 java___________100 
 cpp___________065 
 python_________050 
 ================================

Мой код:

public class Solution {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("================================");
        for(int i=0;i<3;i++)
        {
            String s1=sc.next();
            int x=sc.nextInt();
            System.out.printf(s1 + "%03d", x);
            System.out.println();
        }
        System.out.println("================================");

    }
}

Ответ 1

Это Индекс аргументов. Вы можете прочитать документы. Я попытаюсь объяснить вам строку из учебника:

String fmt = "%1$4s %2$10s %3$10s%n";

// format
cnsl.printft(fmt, "Items", "Quanity", "Price");
cnsl.printft(fmt, "-----", "-----", "-----");
cnsl.printft(fmt, "Tomato", "1Kg", "15");
cnsl.printft(fmt, "Potato", "5Kg", "50");
cnsl.printft(fmt, "Onion", "2Kg", "30");
cnsl.printft(fmt, "Apple", "4Kg", "80");

В целом формат %[argument_index$][flags][width][.precision]conversion.

В нашем примере #$ указывает на позицию внутри нашего оператора printft(). У нас есть 3 строки для форматирования, и поэтому наша строка формата имеет 1$, 2$, 3$. Число, которое следует за его шириной между каждым аргументом. Эта ширина начинается с 0, что означает, что фактическая ширина будет равна +1. s - это наше преобразование в строку и новую строку %n в конце.

Items      Quantity      Price
-----      --------      -----
Tomato     1Kg           15
Potato     5Kg           50
Onion      2Kg           30
Apple      4Kg           80