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

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

输入:

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

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

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

通常格式为%[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