浏览代码

rename to ConsoleTable

Looly 5 年之前
父节点
当前提交
1c19e612fe

+ 158 - 0
hutool-core/src/main/java/cn/hutool/core/lang/ConsoleTable.java

@@ -0,0 +1,158 @@
+package cn.hutool.core.lang;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 控制台打印表格工具
+ *
+ * @author 孙宇
+ * @since 5.4.4
+ */
+public class ConsoleTable {
+
+	private static final char ROW_LINE = '-';
+	private static final char COLUMN_LINE = '|';
+	private static final char CORNER = '+';
+	private static final char SPACE = '\u3000';
+
+	/**
+	 * 表格头信息
+	 */
+	private final List<List<String>> HEADER_LIST = new ArrayList<>();
+	/**
+	 * 表格体信息
+	 */
+	private final List<List<String>> BODY_LIST = new ArrayList<>();
+	/**
+	 * 每列最大字符个数
+	 */
+	private List<Integer> columnCharNumber;
+
+	/**
+	 * 添加头信息
+	 *
+	 * @param titles 列名
+	 * @return 自身对象
+	 */
+	public ConsoleTable addHeader(String... titles) {
+		if (columnCharNumber == null) {
+			columnCharNumber = new ArrayList<>(Collections.nCopies(titles.length, 0));
+		}
+		List<String> l = new ArrayList<>();
+		fillColumns(l, titles);
+		HEADER_LIST.add(l);
+		return this;
+	}
+
+	/**
+	 * 添加体信息
+	 *
+	 * @param values 列值
+	 * @return 自身对象
+	 */
+	public ConsoleTable addBody(String... values) {
+		List<String> l = new ArrayList<>();
+		BODY_LIST.add(l);
+		fillColumns(l, values);
+		return this;
+	}
+
+	/**
+	 * 填充表格头或者体
+	 *
+	 * @param l 被填充列表
+	 * @param columns 填充内容
+	 */
+	private void fillColumns(List<String> 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);
+			}
+		}
+	}
+
+	/**
+	 * 获取表格字符串
+	 *
+	 * @return 表格字符串
+	 */
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		fillBorder(sb);
+		for (List<String> headers : HEADER_LIST) {
+			for (int i = 0; i < headers.size(); i++) {
+				if (i == 0) {
+					sb.append(COLUMN_LINE);
+				}
+				String header = headers.get(i);
+				sb.append(SPACE);
+				sb.append(header);
+				sb.append(SPACE);
+				int l = header.length();
+				int lw = columnCharNumber.get(i);
+				if (lw > l) {
+					for (int j = 0; j < (lw - l); j++) {
+						sb.append(SPACE);
+					}
+				}
+				sb.append(COLUMN_LINE);
+			}
+			sb.append('\n');
+		}
+		fillBorder(sb);
+		for (List<String> bodys : BODY_LIST) {
+			for (int i = 0; i < bodys.size(); i++) {
+				if (i == 0) {
+					sb.append(COLUMN_LINE);
+				}
+				String body = bodys.get(i);
+				sb.append(SPACE);
+				sb.append(body);
+				sb.append(SPACE);
+				int l = body.length();
+				int lw = columnCharNumber.get(i);
+				if (lw > l) {
+					for (int j = 0; j < (lw - l); j++) {
+						sb.append(SPACE);
+					}
+				}
+				sb.append(COLUMN_LINE);
+			}
+			sb.append('\n');
+		}
+		fillBorder(sb);
+		return sb.toString();
+	}
+
+	/**
+	 * 拼装边框
+	 *
+	 * @param sb StringBuilder
+	 */
+	private void fillBorder(StringBuilder sb) {
+		sb.append(CORNER);
+		for (Integer width : columnCharNumber) {
+			sb.append(Convert.toSBC(StrUtil.fillAfter("", ROW_LINE, width + 2)));
+			sb.append(CORNER);
+		}
+		sb.append('\n');
+	}
+
+	/**
+	 * 打印到控制台
+	 */
+	public void print() {
+		Console.print(toString());
+	}
+
+}

+ 0 - 177
hutool-core/src/main/java/cn/hutool/core/lang/ConsoleTableUtil.java

@@ -1,177 +0,0 @@
-package cn.hutool.core.lang;
-
-import cn.hutool.core.convert.Convert;
-import cn.hutool.core.util.StrUtil;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * 控制台打印表格工具
- *
- * @author 孙宇
- */
-public class ConsoleTableUtil {
-    /**
-     * 表格头信息
-     */
-    private final List<List<String>> HEADER_LIST = new ArrayList<>();
-    /**
-     * 表格体信息
-     */
-    private final List<List<String>> BODY_LIST = new ArrayList<>();
-    /**
-     * 每列最大字符个数
-     */
-    private List<Integer> columnCharNumber;
-
-    /**
-     * 测试
-     *
-     * @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();
-
-        t = new ConsoleTableUtil();
-        t.addHeader("体温", "占比");
-        t.addHeader("℃", "%");
-        t.addBody("36.8", "10");
-        t.addBody("37", "5");
-        t.print();
-
-        t = new ConsoleTableUtil();
-        t.addHeader("标题1", "标题2");
-        t.addBody("12345", "混合321654asdfcSDF");
-        t.addBody("sd   e3ee  ff22", "ff值");
-        t.print();
-    }
-
-    /**
-     * 添加头信息
-     *
-     * @param titles 列名
-     * @return 自身对象
-     */
-    public ConsoleTableUtil addHeader(String... titles) {
-        if (columnCharNumber == null) {
-            columnCharNumber = new ArrayList<>(Collections.nCopies(titles.length, 0));
-        }
-        List<String> l = new ArrayList<>();
-        HEADER_LIST.add(l);
-        fillColumns(l, titles);
-        return this;
-    }
-
-    /**
-     * 添加体信息
-     *
-     * @param values 列值
-     * @return 自身对象
-     */
-    public ConsoleTableUtil addBody(String... values) {
-        List<String> l = new ArrayList<>();
-        BODY_LIST.add(l);
-        fillColumns(l, values);
-        return this;
-    }
-
-    /**
-     * 填充表格头或者体
-     *
-     * @param l
-     * @param columns
-     */
-    private void fillColumns(List<String> 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);
-            }
-        }
-    }
-
-    /**
-     * 获取表格字符串
-     *
-     * @return 表格字符串
-     */
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        fillBorder(sb);
-        for (List<String> 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<String> 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();
-    }
-
-    /**
-     * 拼装边框
-     *
-     * @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());
-    }
-
-}

+ 31 - 0
hutool-core/src/test/java/cn/hutool/core/lang/ConsoleTableTest.java

@@ -0,0 +1,31 @@
+package cn.hutool.core.lang;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class ConsoleTableTest {
+
+	@Test
+	@Ignore
+	public void printTest(){
+		ConsoleTable t = new ConsoleTable();
+		t.addHeader("姓名", "年龄");
+		t.addBody("张三", "15");
+		t.addBody("李四", "29");
+		t.addBody("王二麻子", "37");
+		t.print();
+
+		t = new ConsoleTable();
+		t.addHeader("体温", "占比");
+		t.addHeader("℃", "%");
+		t.addBody("36.8", "10");
+		t.addBody("37", "5");
+		t.print();
+
+		t = new ConsoleTable();
+		t.addHeader("标题1", "标题2");
+		t.addBody("12345", "混合321654asdfcSDF");
+		t.addBody("sd   e3ee  ff22", "ff值");
+		t.print();
+	}
+}