mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix code
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package cn.hutool.core.lang;
|
package cn.hutool.core.lang;
|
||||||
|
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
|
import cn.hutool.core.util.CharUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -15,136 +16,136 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class ConsoleTable {
|
public class ConsoleTable {
|
||||||
|
|
||||||
private static final char ROW_LINE = '-';
|
private static final char ROW_LINE = '-';
|
||||||
private static final char COLUMN_LINE = '|';
|
private static final char COLUMN_LINE = '|';
|
||||||
private static final char CORNER = '+';
|
private static final char CORNER = '+';
|
||||||
private static final char SPACE = '\u3000';
|
private static final char SPACE = '\u3000';
|
||||||
private static final char LF = '\n';
|
private static final char LF = CharUtil.LF;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表格头信息
|
* 表格头信息
|
||||||
*/
|
*/
|
||||||
private final List<List<String>> HEADER_LIST = new ArrayList<>();
|
private final List<List<String>> HEADER_LIST = new ArrayList<>();
|
||||||
/**
|
/**
|
||||||
* 表格体信息
|
* 表格体信息
|
||||||
*/
|
*/
|
||||||
private final List<List<String>> BODY_LIST = new ArrayList<>();
|
private final List<List<String>> BODY_LIST = new ArrayList<>();
|
||||||
/**
|
/**
|
||||||
* 每列最大字符个数
|
* 每列最大字符个数
|
||||||
*/
|
*/
|
||||||
private List<Integer> columnCharNumber;
|
private List<Integer> columnCharNumber;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加头信息
|
* 添加头信息
|
||||||
*
|
*
|
||||||
* @param titles 列名
|
* @param titles 列名
|
||||||
* @return 自身对象
|
* @return 自身对象
|
||||||
*/
|
*/
|
||||||
public ConsoleTable addHeader(String... titles) {
|
public ConsoleTable addHeader(String... titles) {
|
||||||
if (columnCharNumber == null) {
|
if (columnCharNumber == null) {
|
||||||
columnCharNumber = new ArrayList<>(Collections.nCopies(titles.length, 0));
|
columnCharNumber = new ArrayList<>(Collections.nCopies(titles.length, 0));
|
||||||
}
|
}
|
||||||
List<String> l = new ArrayList<>();
|
List<String> l = new ArrayList<>();
|
||||||
fillColumns(l, titles);
|
fillColumns(l, titles);
|
||||||
HEADER_LIST.add(l);
|
HEADER_LIST.add(l);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加体信息
|
* 添加体信息
|
||||||
*
|
*
|
||||||
* @param values 列值
|
* @param values 列值
|
||||||
* @return 自身对象
|
* @return 自身对象
|
||||||
*/
|
*/
|
||||||
public ConsoleTable addBody(String... values) {
|
public ConsoleTable addBody(String... values) {
|
||||||
List<String> l = new ArrayList<>();
|
List<String> l = new ArrayList<>();
|
||||||
BODY_LIST.add(l);
|
BODY_LIST.add(l);
|
||||||
fillColumns(l, values);
|
fillColumns(l, values);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 填充表格头或者体
|
* 填充表格头或者体
|
||||||
*
|
*
|
||||||
* @param l 被填充列表
|
* @param l 被填充列表
|
||||||
* @param columns 填充内容
|
* @param columns 填充内容
|
||||||
*/
|
*/
|
||||||
private void fillColumns(List<String> l, String[] columns) {
|
private void fillColumns(List<String> l, String[] columns) {
|
||||||
for (int i = 0; i < columns.length; i++) {
|
for (int i = 0; i < columns.length; i++) {
|
||||||
String column = columns[i];
|
String column = columns[i];
|
||||||
String col = Convert.toSBC(column);
|
String col = Convert.toSBC(column);
|
||||||
l.add(col);
|
l.add(col);
|
||||||
int width = col.length();
|
int width = col.length();
|
||||||
if (width > columnCharNumber.get(i)) {
|
if (width > columnCharNumber.get(i)) {
|
||||||
columnCharNumber.set(i, width);
|
columnCharNumber.set(i, width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取表格字符串
|
* 获取表格字符串
|
||||||
*
|
*
|
||||||
* @return 表格字符串
|
* @return 表格字符串
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
fillBorder(sb);
|
fillBorder(sb);
|
||||||
fillRow(sb, HEADER_LIST);
|
fillRow(sb, HEADER_LIST);
|
||||||
fillBorder(sb);
|
fillBorder(sb);
|
||||||
fillRow(sb, BODY_LIST);
|
fillRow(sb, BODY_LIST);
|
||||||
fillBorder(sb);
|
fillBorder(sb);
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 填充表头或者表体信息
|
* 填充表头或者表体信息
|
||||||
*
|
*
|
||||||
* @param sb
|
* @param sb
|
||||||
* @param list 表头列表或者表体列表
|
* @param list 表头列表或者表体列表
|
||||||
*/
|
*/
|
||||||
private void fillRow(StringBuilder sb, List<List<String>> list) {
|
private void fillRow(StringBuilder sb, List<List<String>> list) {
|
||||||
for (List<String> r : list) {
|
for (List<String> r : list) {
|
||||||
for (int i = 0; i < r.size(); i++) {
|
for (int i = 0; i < r.size(); i++) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
sb.append(COLUMN_LINE);
|
sb.append(COLUMN_LINE);
|
||||||
}
|
}
|
||||||
String header = r.get(i);
|
String header = r.get(i);
|
||||||
sb.append(SPACE);
|
sb.append(SPACE);
|
||||||
sb.append(header);
|
sb.append(header);
|
||||||
sb.append(SPACE);
|
sb.append(SPACE);
|
||||||
int l = header.length();
|
int l = header.length();
|
||||||
int lw = columnCharNumber.get(i);
|
int lw = columnCharNumber.get(i);
|
||||||
if (lw > l) {
|
if (lw > l) {
|
||||||
for (int j = 0; j < (lw - l); j++) {
|
for (int j = 0; j < (lw - l); j++) {
|
||||||
sb.append(SPACE);
|
sb.append(SPACE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.append(COLUMN_LINE);
|
sb.append(COLUMN_LINE);
|
||||||
}
|
}
|
||||||
sb.append(LF);
|
sb.append(LF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼装边框
|
* 拼装边框
|
||||||
*
|
*
|
||||||
* @param sb StringBuilder
|
* @param sb StringBuilder
|
||||||
*/
|
*/
|
||||||
private void fillBorder(StringBuilder sb) {
|
private void fillBorder(StringBuilder sb) {
|
||||||
sb.append(CORNER);
|
sb.append(CORNER);
|
||||||
for (Integer width : columnCharNumber) {
|
for (Integer width : columnCharNumber) {
|
||||||
sb.append(Convert.toSBC(StrUtil.fillAfter("", ROW_LINE, width + 2)));
|
sb.append(Convert.toSBC(StrUtil.fillAfter("", ROW_LINE, width + 2)));
|
||||||
sb.append(CORNER);
|
sb.append(CORNER);
|
||||||
}
|
}
|
||||||
sb.append(LF);
|
sb.append(LF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打印到控制台
|
* 打印到控制台
|
||||||
*/
|
*/
|
||||||
public void print() {
|
public void print() {
|
||||||
Console.print(toString());
|
Console.print(toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user