温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - How can I create table using ASCII in a console?
java console

java - 如何在控制台中使用ASCII创建表?

发布于 2020-03-30 21:40:03

我想组织这样的信息:

信息是用单元组织的,而System.out.println信息是非常混乱的。

或这个

查看更多

提问者
Mike Brian Olivera
被浏览
19
Pshemo 2018-08-24 20:29

您可以使用System.out.format()System.out.printf()printf内部简单地调用,format因此这两种方法都可以得到相同的结果)。

在下面,您将找到一个示例,该示例将文本左对齐并在未使用的地方填充空格。可以将字符串向左对齐%-15s,这意味着:

  • % 储备金(占位符)
  • 15 字符的“地方”
  • s 字符串数据类型
  • - 然后从左侧开始打印它们。

如果要处理数字,请使用d后缀,例如%-4d最多4个数字的后缀,应将其放在列的左侧。

BTW printf不会在打印数据后自动添加行分隔符,因此,如果wan要将光标移动到下一行,我们需要自己做。我们可以使用\r\n,或者让Formatter生成依赖于操作系统的行分隔符(例如Windows \r\n),我们可以使用%n占位符(请注意:它不需要任何数据作为参数,Java会根据OS提供正确的序列)。

您可以Formatter该类的文档中找到有关受支持的语法的更多信息

String leftAlignFormat = "| %-15s | %-4d |%n";

System.out.format("+-----------------+------+%n");
System.out.format("| Column name     | ID   |%n");
System.out.format("+-----------------+------+%n");
for (int i = 0; i < 5; i++) {
    System.out.format(leftAlignFormat, "some data" + i, i * i);
}
System.out.format("+-----------------+------+%n");

输出

+-----------------+------+
| Column name     | ID   |
+-----------------+------+
| some data0      | 0    |
| some data1      | 1    |
| some data2      | 4    |
| some data3      | 9    |
| some data4      | 16   |
+-----------------+------+