1. 概述
Java标准库提供了printf()
和format()
方法,用于在控制台上输出格式化数据。这使得在控制台应用程序中使用ASCII字符创建表格成为可能。此外,还有一个名为AsciiTable的第三方库,进一步简化了这一任务。
在这个教程中,我们将学习如何利用Java标准API和第三方API,使用ASCII字符在Java中创建表格。
2. 项目设置
为了理解如何在Java中将表格输出到控制台,我们首先创建一个简单的项目,它将在控制台上显示一个人的姓名、身高、体重和身体质量指数(BMI)。
首先,创建一个名为BodyMassIndex
的类:
class BodyMassIndex {
private String name;
private double height;
private double weight;
// constructor, getters and setters
double calculate() {
double bmi = weight / (height * height);
String formattedBmi = String.format("%.2f", bmi);
return Double.parseDouble(formattedBmi);
}
}
在这里,我们创建了一个名为BodyMassIndex
的类,其构造函数接受name
、height
和weight
作为参数。还定义了一个名为calculate()
的方法来计算BMI。
接下来,我们会创建一个名为BodyMassIndexApplication
的新类,其中包含使用BodyMassIndex
对象的方法,使用ASCII字符构建表格。
接着,在类中创建BodyMassIndex
对象,并将它们存储在一个ArrayList
中:
List<BodyMassIndex> bodyMassIndices = new ArrayList<>();
bodyMassIndices.add(new BodyMassIndex("Tom", 1.8, 80));
bodyMassIndices.add(new BodyMassIndex("Elton", 1.9, 90));
bodyMassIndices.add(new BodyMassIndex("Harry", 1.9, 90));
bodyMassIndices.add(new BodyMassIndex("Hannah", 1.9, 90));
在后面的章节中,我们将使用System.out.format()
和AsciiTable方法以表格形式在控制台上输出数据。
3. 使用System.out.format()
方法
Java的PrintStream
对象System.out
提供了format()
和print()
等方法,用于将格式字符串输出到控制台,这对于使用ASCII字符构建表格非常有用。这些方法可以精确地放置ASCII字符来绘制线条并定位数据。
3.1. System.out.format()
我们将使用格式说明符来正确地将数据放入正确的列。让我们看一个示例代码,该代码使用ASCII字符向控制台输出表格:
System.out.format("+---------+---------+---------+-------+%n");
System.out.format("| Name | Height | Weight | BMI |%n");
System.out.format("+---------+---------+---------+-------+%n");
String leftAlignment = "| %-7s | %-7.2f | %-7.2f | %-5.2f |%n";
for (BodyMassIndex bodyMassIndex : bodyMassIndices) {
System.out.format(leftAlignment, bodyMassIndex.getName(), bodyMassIndex.getHeight(), bodyMassIndex.getWeight(), bodyMassIndex.calculate());
System.out.format("+---------+---------+---------+-------+%n");
}
在上述代码中,我们为表格创建了四个列的头部。首先,我们使用加号表示每一列的开始和结束,然后使用破折号绘制水平线。接着,我们使用换行符终止每一行。
此外,我们使用竖线符号绘制垂直线。字符+
、-
和|
根据表格结构进行排列。
最后,我们声明一个名为leftAlignment
的字符串变量,并将其赋值为格式字符串String
。格式字符串有助于控制控制台的输出格式。格式字符串包含以下元素:
-
|
- 分隔输出中的列 -
%-7s
- 帮助左对齐字符串,使用最少的7个字符宽度 -
%-7.2f
- 帮助左对齐浮点数,使用最少的7个字符宽度和2位小数 -
%-5.2f
- 设置最小字段宽度为5,并保留2位小数 -
%n
- 换行符
另外,也可以用System.out.printf()
替换System.out.format()
,两者效果相同。
3.2. 输出结果
这是生成的表格:
控制台显示了使用ASCII字符构建的表格。表格根据我们的规格在控制台上渲染。
4. 使用AsciiTable库
AsciiTable是一个第三方库,可轻松创建美观的ASCII表格。
4.1. AsciiTable库
要在项目中使用AsciiTable库,请将其依赖项添加到pom.xml
:
<dependency>
<groupId>de.vandermeer</groupId>
<artifactId>asciitable</artifactId>
<version>0.3.2</version>
</dependency>
接下来,看一个使用该库以ASCII格式创建BMI数据表格的示例代码:
AsciiTable asciiTable = new AsciiTable();
asciiTable.addRule();
asciiTable.addRow("Name", "Height", "Weight", "BMI");
asciiTable.addRule();
for (BodyMassIndex bodyMassIndex : bodyMassIndices) {
asciiTable.addRow(bodyMassIndex.getName(), bodyMassIndex.getHeight(), bodyMassIndex.getWeight(), bodyMassIndex.calculate());
asciiTable.addRule();
}
asciiTable.setTextAlignment(TextAlignment.CENTER);
String render = asciiTable.render();
System.out.println(render);
在代码中,我们创建一个AsciiTable
对象。然后,我们调用@addRule()
在其上添加水平线。接着,使用addRow()
方法将数据填充到AsciiTable
对象中。
此外,AsciiTable
类还提供格式化数据的方法。通过在AsciiTable
对象上调用setTextAlignment()
,我们可以将数据居中对齐。该方法接受枚举作为参数,指定文本对齐方式。
最后,我们调用render()
,它返回AsciiTable
对象上的字符串。
4.2. 输出结果
这是控制台的输出:
AsciiTable库提供了用最少的代码创建美观的控制台ASCII表格的简便方法。
5. 总结
在这篇文章中,我们学习了如何使用内置的System.out.format()
方法和AsciiTable库将表格输出到控制台。
两种方法都能完成任务,但使用AsciiTable库时,对列的正确对齐更省力,而System.out.format()
方法则提供了更多的样式控制直接性。
如往常一样,示例代码的完整源代码可以在GitHub上找到:GitHub链接。