Java控制台输出表格(可设置分隔符和对齐方式)

Java控制台输出表格(可设置分隔符和对齐方式)

使用场景

开发中有一个需求:某个业务查询出一个表格,然后返回给前端一个控制台样式的表格,以模拟控制台输出。但是没有使用过类似的工具类,google了很久也没有找到满意的答案,因为大部分都是简单的打印,并没有很多可以自定义的部分,比如对齐方式,null处理等,于是想着抽象优化一下。

类似的工具还有:
TableList.java
java-ascii-table
asciitable
这些工具都非常棒,特别是最后一个asciitable,但是这些工具或多或少都太复杂或者不满足需求,于是我自己写了一个。

介绍

  • 单元格级别的对齐设置;
  • 可不设置header;
  • 可配置行分隔符;
  • 可配置横向间隔字符;
  • 可配置竖向间隔字符;
  • 可设置转角连接点字符;
  • 可设置空字符串处理策略;
  • 可设置是否严格模式,严格模式下表头和各行的列数必须一致。

代码

clyoudu-util

使用方法

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         :
*······*······················*············*
  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值