美元符号($)在printf格式字符串中做什么?

Suh*_*chu 2 java printf string-formatting system.out

我正在尝试使用printf语句在java中格式化,如在此网页中:单击此处.但我无法弄清楚$ sign的目的是什么.有人可以向我解释一下吗?

输入:

java 100
cpp 65
python 50
Run Code Online (Sandbox Code Playgroud)

预期输出:(应该有一个空格而不是_)

 ================================
 java___________100 
 cpp___________065 
 python_________050 
 ================================
Run Code Online (Sandbox Code Playgroud)

我的代码:

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("================================");

    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 6

这是参数索引.你可以阅读文档.我将尝试为您解释教程中的字符串:

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

// format
cnsl.printft(fmt, "Items", "Quantity", "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");
Run Code Online (Sandbox Code Playgroud)

一般来说格式是%[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
Run Code Online (Sandbox Code Playgroud)