在 Java 中对齐 printf 输出

2022-09-02 02:58:59

我需要显示一个项目列表及其数组中的价格,并希望对齐价格。我几乎让它工作,但需要改进。下面是代码和输出。任何想法如何使所有价格保持一致?到目前为止,有些工作,但有些没有。提前致谢。

//for loop
System.out.printf("%d. %s \t\t $%.2f\n",
                i + 1, BOOK_TYPE[i], COST[i]);

输出:

1. Newspaper         $1.00
2. Paper Back        $7.50
3. Hardcover book        $10.00
4. Electronic book       $2.00
5. Magazine          $3.00

答案 1

您可以尝试以下示例。在宽度前使用“-”以确保左缩进。默认情况下,它们将右缩进;这可能不符合您的目的。

System.out.printf("%2d. %-20s $%.2f%n",  i + 1, BOOK_TYPE[i], COST[i]);

格式字符串语法:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

格式化数字打印输出:https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

PS:这可以作为对DwB答案的评论,但我仍然没有评论的权限,所以回答它。


答案 2

一个浮现在脑海中的简单解决方案是有一个空间块:String

String indent = "                  "; // 20 spaces.

打印出字符串时,计算实际缩进量并将其添加到末尾:

String output = "Newspaper";
output += indent.substring(0, indent.length - output.length);

这将调解字符串的空格数,并将它们全部放在同一列中。