使用 System.out 將輸出格式化為表格格式
1. 概述
在 Java 應用程式中,通常需要以類似表格的格式顯示資料。 System.out
提供了多種方法來執行此操作,從簡單的字串連接到高級格式化技術。
在本教程中,我們將探索使用System.out
以表狀結構格式化輸出的各種方法。
2. 使用字串連接
在表中格式化輸出的最簡單方法是使用字串連接。雖然這種方法很簡單,但需要手動調整空間和對齊方式:
void usingStringConcatenation() {
String[] headers = {"ID", "Name", "Age"};
String[][] data = {
{"1", "James", "24"},
{"2", "Sarah", "27"},
{"3", "Keith", "31"}
};
System.out.println(headers[0] + " " + headers[1] + " " + headers[2]);
for (String[] row : data) {
System.out.println(row[0] + " " + row[1] + " " + row[2]);
}
}
預期輸出為:
ID Name Age
1 James 24
2 Sarah 27
3 Keith 31
雖然這種方法有效,但**在處理動態資料時會變得很麻煩,因為它需要手動調整來保持對齊。**
3. 使用printf()
The System.out.printf()
方法提供了一種更靈活的方式來格式化字串。我們可以指定每列的寬度並確保正確對齊:
void usingPrintf() {
String[] headers = {"ID", "Name", "Age"};
String[][] data = {
{"1", "James", "24"},
{"2", "Sarah", "27"},
{"3", "Keith", "31"}
};
System.out.printf("%-5s %-10s %-5s%n", headers[0], headers[1], headers[2]);
for (String[] row : data) {
System.out.printf("%-5s %-10s %-5s%n", row[0], row[1], row[2]);
}
}
預期輸出如下:
ID Name Age
1 James 24
2 Sarah 27
3 Keith 31
printf
方法中, %-5s
指定左對齊字串,寬度為5個字元。而%-10s
則指定左對齊字串,寬度為10個字元。
這種方法更加簡潔,並且確保無論資料長度如何,列都對齊。
4.使用String.format()
如果我們需要將格式化輸出儲存在字串中而不是直接列印它,我們可以使用String.format()
。此方法使用與printf()
相同的格式化語法。
void usingStringFormat() {
String[] headers = {"ID", "Name", "Age"};
String[][] data = {
{"1", "James", "24"},
{"2", "Sarah", "27"},
{"3", "Keith", "31"}
};
String header = String.format("%-5s %-10s %-5s", headers[0], headers[1], headers[2]);
System.out.println(header);
for (String[] row : data) {
String formattedRow = String.format("%-5s %-10s %-5s", row[0], row[1], row[2]);
System.out.println(formattedRow);
}
}
輸出與printf()
範例相同。不同之處在於String.format()
傳回一個格式化字串,我們可以使用它進行進一步處理或記錄:
ID Name Age
1 James 24
2 Sarah 27
3 Keith 31
5.使用StringBuilder
當處理動態或大量資料時,使用StringBuilder
建立表格可以更有效。這種方法允許我們將整個輸出建構為單一字串並列印一次:
void usingStringBuilder() {
String[] headers = {"ID", "Name", "Age"};
String[][] data = {
{"1", "James", "24"},
{"2", "Sarah", "27"},
{"3", "Keith", "31"}
};
StringBuilder table = new StringBuilder();
table.append(String.format("%-5s %-10s %-5s%n", headers[0], headers[1], headers[2]));
for (String[] row : data) {
table.append(String.format("%-5s %-10s %-5s%n", row[0], row[1], row[2]));
}
System.out.print(table.toString());
}
預期輸出:
ID Name Age
1 James 24
2 Sarah 27
3 Keith 31
當我們需要建立複雜的輸出或考慮效能時,此方法特別有用,因為StringBuilder
減少了多字串連接的開銷。
6. 使用 ASCII 表
我們可以使用外部函式庫,例如ASCII Table
。它是一個第三方函式庫,可以輕鬆建立漂亮的 ASCII 表。
要使用ASCII Table
方法,我們需要將其依賴項包含在我們的專案中:
<dependency>
<groupId>de.vandermeer</groupId>
<artifactId>asciitable</artifactId>
<version>0.3.2</version>
<dependency>
然後我們可以使用它的方法來建立一個類似表格的結構。這是使用ASCII Table
的範例:
void usingAsciiTable() {
AsciiTable table = new AsciiTable();
table.addRule();
table.addRow("ID", "Name", "Age");
table.addRule();
table.addRow("1", "James", "24");
table.addRow("2", "Sarah", "27");
table.addRow("3", "Keith", "31");
table.addRule();
String renderedTable = table.render();
System.out.println(renderedTable);
}
預期輸出將是:
┌──────────────────────────┬─────────────────────────┬─────────────────────────┐
│ID │Name │Age │
├──────────────────────────┼─────────────────────────┼─────────────────────────┤
│1 │James │24 │
│2 │Sarah │27 │
│3 │Keith │31 │
└──────────────────────────┴─────────────────────────┴─────────────────────────┘
七、結論
在本教程中,我們探索了使用System.out
以表狀結構格式化輸出的各種方法。對於簡單的任務,基本的字串連接或printf
效果很好。但是,對於更動態或更複雜的輸出,使用StringBuilder
可能會更有效。 ASCII table
有助於產生乾淨且格式良好的輸出。透過根據我們的要求選擇正確的方法,我們可以產生整潔、可讀且結構良好的控制台輸出。
與往常一樣,完整的源代碼可以在 GitHub 上取得。