Any Java libraries for drawing ASCII tables?
I need to output data into a console as a table. I was wondering maybe there are some java libraries that would take care of drawing tables in ASCII art, aligning values开发者_Go百科 inside cells, etc?
╔══════╤═══════════╤════════╗
║ ID │ Name │ Age ║
╠══════╪═══════════╪════════╣
║ 1 │ John │ 24 ║
╟──────┼───────────┼────────╢
║ 2 │ Jeff │ 19 ║
╟──────┼───────────┼────────╢
║ 3 │ Joel │ 42 ║
╚══════╧═══════════╧════════╝
This worked pretty well for me: http://code.google.com/p/java-ascii-table/
String [] header = {
"User Name",
"Salary", "Designation",
"Address", "Lucky#"
};
String[][] data = {
{ "Ram", "2000", "Manager", "#99, Silk board", "1111" },
{ "Sri", "12000", "Developer", "BTM Layout", "22222" },
{ "Prasad", "42000", "Lead", "#66, Viaya Bank Layout", "333333" },
{ "Anu", "132000", "QA", "#22, Vizag", "4444444" },
{ "Sai", "62000", "Developer", "#3-3, Kakinada" },
{ "Venkat", "2000", "Manager" },
{ "Raj", "62000"},
{ "BTC"},
};
Which renders the following:
+-----------+--------+-------------+------------------------+---------+ | User Name | Salary | Designation | Address | Lucky# | +-----------+--------+-------------+------------------------+---------+ | Ram | 2000 | Manager | #99, Silk board | 1111 | | Sri | 12000 | Developer | BTM Layout | 22222 | | Prasad | 42000 | Lead | #66, Viaya Bank Layout | 333333 | | Anu | 132000 | QA | #22, Vizag | 4444444 | | Sai | 62000 | Developer | #3-3, Kakinada | | | Venkat | 2000 | Manager | | | | Raj | 62000 | | | | | BTC | | | | | +-----------+--------+-------------+------------------------+---------+
Try iNamik Text Table Formatter for Java.
I like your table and wrote that: https://github.com/klaus31/ascii-art-table
Here is also a handy library: https://github.com/JakeWharton/flip-tables
As the doc said:
String[] headers = { "Test", "Header" };
String[][] data = {
{ "Foo", "Bar" },
{ "Kit", "Kat" },
};
System.out.println(FlipTable.of(headers, data));
should have the following output:
╔══════╤════════╗
║ Test │ Header ║
╠══════╪════════╣
║ Foo │ Bar ║
╟──────┼────────╢
║ Kit │ Kat ║
╚══════╧════════╝
If you already have a formatted 2d array of strings with the desired column widths, then you can draw a simple table yourself without any libraries, something like this:
+------+---------+-------+
| ID | Name | Age |
+------+---------+-------+
| 1 | John | 24 |
+------+---------+-------+
| 2 | Jeff | 19 |
+------+---------+-------+
| 3 | Joel | 42 |
+------+---------+-------+
Try it online!
public static String drawTable(String[][] table) {
String borderRow = Arrays.stream(table[0])
// border row between rows
.map(str -> "-".repeat(str.length()))
.collect(Collectors.joining("+", "+", "+\n"));
return Arrays.stream(table)
// table row with borders between cells
.map(row -> Arrays.stream(row)
.collect(Collectors.joining("|", "|", "|\n")))
.collect(Collectors.joining(borderRow, borderRow, borderRow));
}
public static void main(String[] args) {
String[][] table = {
{" ID ", " Name ", " Age "},
{" 1 ", " John ", " 24 "},
{" 2 ", " Jeff ", " 19 "},
{" 3 ", " Joel ", " 42 "}};
System.out.println(drawTable(table));
}
See also:
• How to draw a staircase with Java?
• Formatting 2d array of numbers
精彩评论