用Java对齐printf输出

use*_*482 16 java printf text-align alignment

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

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

输出:

1. Newspaper         $1.00
2. Paper Back        $7.50
3. Hardcover book        $10.00
4. Electronic book       $2.00
5. Magazine          $3.00
Run Code Online (Sandbox Code Playgroud)

小智 23

您可以尝试以下示例.在宽度之前使用' - '以确保左缩进.默认情况下,它们会缩进; 这可能不适合你的目的.

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

格式字符串语法: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答案的评论,但我仍然没有评论权限,所以回答它.


chr*_*her 5

我想到的一个简单的解决方案是使用一块String空格:

String indent = "                  "; // 20 spaces.
Run Code Online (Sandbox Code Playgroud)

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

String output = "Newspaper";
output += indent.substring(0, indent.length - output.length);
Run Code Online (Sandbox Code Playgroud)

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

  • Java确实有StringUtils.leftPad()和StringUtils.rightPad()。这些是 Apache Commons Lang 的一部分。 (2认同)

DwB*_*DwB 5

printf和类似printf的方法的格式规范采用可选的宽度参数.

System.out.printf( "%10d. %25s $%25.2f\n",
                   i + 1, BOOK_TYPE[i], COST[i] );
Run Code Online (Sandbox Code Playgroud)

将宽度调整为所需的值.

  • 首先,不要在不知道任何关于那个人的事情的情况下给某人打电话.其次,我是Java初学者,但我读过有关printf的内容,我知道%10d会在变量之前打印10个空格.现在先生知道并且不是懒惰,你的代码远不是我需要的.如果你读了我的问题,我需要保持对齐,除了第二个变量需要改变后的空格(不是常数),所以第三个变量也是对齐的.不管怎么说,多谢拉.美好的一天. (9认同)
  • 如果您阅读过 printf 文档,那么您就会知道 %10d 指定的字段宽度为 10,而 %010d 指定宽度为 10 的零左填充字段。考虑阅读文档。 (2认同)
  • 阅读文档将向您展示 a - 作为标志将左对齐该字段。例如 %-10d (2认同)