From 7cebc9bf233f60b57c7b99ad399983dc67423199 Mon Sep 17 00:00:00 2001 From: SunYu Date: Mon, 28 Sep 2020 15:06:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=B8=AA=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4=E9=94=99=E4=BD=8D=E7=9A=84bug=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E4=B8=94=E4=BC=98=E5=8C=96=E4=BA=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/lang/ConsoleTableUtil.java | 285 ++++++++++-------- 1 file changed, 152 insertions(+), 133 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/ConsoleTableUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/ConsoleTableUtil.java index a2a943d1e..f894dbf50 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/ConsoleTableUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/ConsoleTableUtil.java @@ -13,146 +13,165 @@ import java.util.List; * @author 孙宇 */ public class ConsoleTableUtil { - /** - * 每列最大字符个数 - */ - private List columnCharNumber; - /** - * 表格头信息 - */ - private final List> HEADER_LIST = new ArrayList<>(); - /** - * 表格体信息 - */ - private final List> BODY_LIST = new ArrayList<>(); + /** + * 表格头信息 + */ + private final List> HEADER_LIST = new ArrayList<>(); + /** + * 表格体信息 + */ + private final List> BODY_LIST = new ArrayList<>(); + /** + * 每列最大字符个数 + */ + private List columnCharNumber; - /** - * 添加头信息 - * - * @param columns 列名 - * @return 自身对象 - */ - public ConsoleTableUtil addHeader(String... columns) { - columnCharNumber = new ArrayList<>(Collections.nCopies(columns.length, 0)); - List l = new ArrayList<>(); - HEADER_LIST.add(l); - for (int i = 0; i < columns.length; i++) { - String column = columns[i]; - String col = Convert.toSBC(column); - l.add(col); - int width = col.length(); - columnCharNumber.set(i, width); - } - return this; - } + /** + * 测试 + * + * @param args + */ + public static void main(String[] args) { + ConsoleTableUtil t = new ConsoleTableUtil(); + t.addHeader("姓名", "年龄"); + t.addBody("张三", "15"); + t.addBody("李四", "29"); + t.addBody("王二麻子", "37"); + t.print(); - /** - * 添加体信息 - * - * @param values 列值 - * @return 自身对象 - */ - public ConsoleTableUtil addBody(String... values) { - List l = new ArrayList<>(); - BODY_LIST.add(l); - for (int i = 0; i < values.length; i++) { - String value = values[i]; - String val = Convert.toSBC(value); - l.add(val); - int width = val.length(); - if (width > columnCharNumber.get(i)) { - columnCharNumber.set(i, width); - } - } - return this; - } + t = new ConsoleTableUtil(); + t.addHeader("体温", "占比"); + t.addHeader("℃", "%"); + t.addBody("36.8", "10"); + t.addBody("37", "5"); + t.print(); - /** - * 获取表格字符串 - * - * @return 表格字符串 - */ - public String toString() { - StringBuilder sb = new StringBuilder(); - border(sb); - for (List headers : HEADER_LIST) { - for (int i = 0; i < headers.size(); i++) { - if (i == 0) { - sb.append('|'); - } - String header = headers.get(i); - sb.append(Convert.toSBC(" ")); - sb.append(header); - sb.append(Convert.toSBC(" ")); - int l = header.length(); - int lw = columnCharNumber.get(i); - if (lw > l) { - for (int j = 0; j < (lw - l); j++) { - sb.append(Convert.toSBC(" ")); - } - } - sb.append('|'); - } - sb.append('\n'); - } - border(sb); - for (List bodys : BODY_LIST) { - for (int i = 0; i < bodys.size(); i++) { - if (i == 0) { - sb.append('|'); - } - String body = bodys.get(i); - sb.append(Convert.toSBC(" ")); - sb.append(body); - sb.append(Convert.toSBC(" ")); - int l = body.length(); - int lw = columnCharNumber.get(i); - if (lw > l) { - for (int j = 0; j < (lw - l); j++) { - sb.append(Convert.toSBC(" ")); - } - } - sb.append('|'); - } - sb.append('\n'); - } - border(sb); - return sb.toString(); - } + t = new ConsoleTableUtil(); + t.addHeader("标题1", "标题2"); + t.addBody("12345", "混合321654asdfcSDF"); + t.addBody("sd e3ee ff22", "ff值"); + t.print(); + } - private void border(StringBuilder sb) { - sb.append('*'); - for (Integer width : columnCharNumber) { - sb.append(Convert.toSBC(StrUtil.fillAfter("", '-', width + 2))); - sb.append('*'); - } - sb.append('\n'); - } + /** + * 添加头信息 + * + * @param titles 列名 + * @return 自身对象 + */ + public ConsoleTableUtil addHeader(String... titles) { + if (columnCharNumber == null) { + columnCharNumber = new ArrayList<>(Collections.nCopies(titles.length, 0)); + } + List l = new ArrayList<>(); + HEADER_LIST.add(l); + fillColumns(l, titles); + return this; + } - public void print() { - Console.print(toString()); - } + /** + * 添加体信息 + * + * @param values 列值 + * @return 自身对象 + */ + public ConsoleTableUtil addBody(String... values) { + List l = new ArrayList<>(); + BODY_LIST.add(l); + fillColumns(l, values); + return this; + } - public static void main(String[] args) { - ConsoleTableUtil t = new ConsoleTableUtil(); - t.addHeader("姓名", "年龄"); - t.addBody("张三", "15"); - t.addBody("李四", "29"); - t.addBody("王二麻子", "37"); - t.print(); + /** + * 填充表格头或者体 + * + * @param l + * @param columns + */ + private void fillColumns(List l, String[] columns) { + for (int i = 0; i < columns.length; i++) { + String column = columns[i]; + String col = Convert.toSBC(column); + l.add(col); + int width = col.length(); + if (width > columnCharNumber.get(i)) { + columnCharNumber.set(i, width); + } + } + } - t = new ConsoleTableUtil(); - t.addHeader("体温", "占比"); - t.addHeader("℃", "%"); - t.addBody("36.8", "10"); - t.addBody("37", "5"); - t.print(); + /** + * 获取表格字符串 + * + * @return 表格字符串 + */ + public String toString() { + StringBuilder sb = new StringBuilder(); + fillBorder(sb); + for (List headers : HEADER_LIST) { + for (int i = 0; i < headers.size(); i++) { + if (i == 0) { + sb.append('|'); + } + String header = headers.get(i); + sb.append(Convert.toSBC(" ")); + sb.append(header); + sb.append(Convert.toSBC(" ")); + int l = header.length(); + int lw = columnCharNumber.get(i); + if (lw > l) { + for (int j = 0; j < (lw - l); j++) { + sb.append(Convert.toSBC(" ")); + } + } + sb.append('|'); + } + sb.append('\n'); + } + fillBorder(sb); + for (List bodys : BODY_LIST) { + for (int i = 0; i < bodys.size(); i++) { + if (i == 0) { + sb.append('|'); + } + String body = bodys.get(i); + sb.append(Convert.toSBC(" ")); + sb.append(body); + sb.append(Convert.toSBC(" ")); + int l = body.length(); + int lw = columnCharNumber.get(i); + if (lw > l) { + for (int j = 0; j < (lw - l); j++) { + sb.append(Convert.toSBC(" ")); + } + } + sb.append('|'); + } + sb.append('\n'); + } + fillBorder(sb); + return sb.toString(); + } - t = new ConsoleTableUtil(); - t.addHeader("标题1", "标题2"); - t.addBody("12345", "混合321654asdfcSDF"); - t.addBody("sd e3ee ff22", "ff值"); - t.print(); - } + /** + * 拼装边框 + * + * @param sb + */ + private void fillBorder(StringBuilder sb) { + sb.append('*'); + for (Integer width : columnCharNumber) { + sb.append(Convert.toSBC(StrUtil.fillAfter("", '-', width + 2))); + sb.append('*'); + } + sb.append('\n'); + } + + /** + * 打印到控制台 + */ + public void print() { + Console.print(toString()); + } } \ No newline at end of file