开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜