Java控制台输出表格(可设置分隔符和对齐方式)
使用场景
开发中有一个需求:某个业务查询出一个表格,然后返回给前端一个控制台样式的表格,以模拟控制台输出。但是没有使用过类似的工具类,google
了很久也没有找到满意的答案,因为大部分都是简单的打印,并没有很多可以自定义的部分,比如对齐方式,null
处理等,于是想着抽象优化一下。
类似的工具还有:
TableList.java
java-ascii-table
asciitable
这些工具都非常棒,特别是最后一个asciitable
,但是这些工具或多或少都太复杂或者不满足需求,于是我自己写了一个。
介绍
- 单元格级别的对齐设置;
- 可不设置header;
- 可配置行分隔符;
- 可配置横向间隔字符;
- 可配置竖向间隔字符;
- 可设置转角连接点字符;
- 可设置空字符串处理策略;
- 可设置是否严格模式,严格模式下表头和各行的列数必须一致。
代码
使用方法
public static void main(String[] args){
List<Cell> header = new ArrayList<Cell>(){{
add(new Cell("name"));
add(new Cell("email"));
add(new Cell("tel"));
}};
List<List<Cell>> body = new ArrayList<List<Cell>>(){{
add(new ArrayList<Cell>(){{
add(new Cell("kat"));
add(new Cell(Align.CENTER,"kat@gimal.com"));
add(new Cell(Align.RIGHT,"54321"));
}});
add(new ArrayList<Cell>(){{
add(new Cell("ashe"));
add(new Cell("ashe_111@hotmail.com"));
add(new Cell("9876543210"));
}});
add(new ArrayList<Cell>(){{
add(null);
add(new Cell(null));
add(new Cell(Align.LEFT,"11"));
}});
}};
//default
new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).build().print();
//no header
//new ConsoleTable.ConsoleTableBuilder().addRows(body).build().print();
//restrict
//header.add(new Cell("not restrict"));
//new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).restrict(false).build().print();
//new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).restrict(true).build().print();
//"null"
//new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).nullPolicy(NullPolicy.NULL_STRING).build().print();
//new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).nullPolicy(NullPolicy.THROW).build().print();
//line sep
//new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).lineSep("\n\n").build().print();
//vertical sep & horizontal sep & join sep
//new new ConsoleTable.ConsoleTableBuilder().addHeaders(header).addRows(body).verticalSep(":").horizontalSep("·").joinSep("*").build().print();
}
示例输出:
+------+----------------------+------------+
| name | email | tel |
+------+----------------------+------------+
| kat | kat@gimal.com | 54321 |
| ashe | ashe_111@hotmail.com | 9876543210 |
| | | 11 |
+------+----------------------+------------+
*······*······················*············*
: name : email : tel :
*······*······················*············*
: kat : kat@gimal.com : 54321 :
: ashe : ashe_111@hotmail.com : 9876543210 :
: : : 11 :
*······*······················*············*