在 Java 控制台中使用 ASCII 建立表
1. 概述
Java標準函式庫提供了printf()
和format()
方法來將格式化資料輸出到控制台。這兩種方法使得可以在控制台應用程式中使用 ASCII 字元建立表。此外,還有一個名為 AsciiTable 的第三方函式庫可以進一步簡化該任務。
在本教程中,我們將學習如何使用 Java 標準 API 和第三方 API 在 Java 中使用 ASCII 字元建立表格。
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()
的方法來計算體重指數。
我們還將建立一個名為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");
}
在上面的程式碼中,我們為表格建立了四個欄位的標題。首先,我們使用加號來顯示每個欄位的開頭和結尾。接下來,我們使用連字符來繪製水平線。然後,我們使用換行符號來終止每一行。
此外,我們使用管道符號來繪製垂直線。字元+
、 –
和|
符號是根據表格的結構排列的。
最後,我們宣告一個名為 l eftAlignment
的字串變量,並為其指派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()
將資料對齊到中心。該方法接受enum
作為參數來指定文字對齊方式。
最後,我們呼叫render(),
它傳回AsciiTable
物件上的字串。
4.2.輸出
這是控制台上的輸出:
AsciiTable 函式庫提供了一種簡單的方法,可以使用最少的程式碼為控制台建立美觀的 ASCII 表。
5. 結論
在本文中,我們學習如何使用內建的System.out.format()
方法和 AsciiTable 函式庫將表格輸出到控制台。
這兩種方法都提供了實現任務的工作方式。然而,雖然使用 AsciiTable 函式庫需要較少的工作來正確對齊列, System.out.format()
方法可以更直接地控制樣式。
與往常一樣,範例的完整原始程式碼可在 GitHub 上取得。