代码优化

This commit is contained in:
SunYu 2020-09-30 13:50:13 +08:00
parent 7c23aadb9e
commit 93877205c5
2 changed files with 149 additions and 153 deletions

View File

@ -15,144 +15,136 @@ import java.util.List;
*/
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 static final char ROW_LINE = '-';
private static final char COLUMN_LINE = '|';
private static final char CORNER = '+';
private static final char SPACE = '\u3000';
private static final char LF = '\n';
/**
* 表格头信息
*/
private final List<List<String>> HEADER_LIST = new ArrayList<>();
/**
* 表格体信息
*/
private final List<List<String>> BODY_LIST = new ArrayList<>();
/**
* 每列最大字符个数
*/
private List<Integer> columnCharNumber;
/**
* 表格头信息
*/
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 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 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);
}
}
}
/**
* 填充表格头或者体
*
* @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();
}
/**
* 获取表格字符串
*
* @return 表格字符串
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
fillBorder(sb);
fillRow(sb, HEADER_LIST);
fillBorder(sb);
fillRow(sb, BODY_LIST);
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');
}
/**
* 填充表头或者表体信息
*
* @param sb
* @param list 表头列表或者表体列表
*/
private void fillRow(StringBuilder sb, List<List<String>> list) {
for (List<String> r : list) {
for (int i = 0; i < r.size(); i++) {
if (i == 0) {
sb.append(COLUMN_LINE);
}
String header = r.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(LF);
}
}
/**
* 打印到控制台
*/
public void print() {
Console.print(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(LF);
}
/**
* 打印到控制台
*/
public void print() {
Console.print(toString());
}
}

View File

@ -5,27 +5,31 @@ 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();
@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();
Console.log();
t = new ConsoleTable();
t.addHeader("标题1", "标题2");
t.addBody("12345", "混合321654asdfcSDF");
t.addBody("sd e3ee ff22", "ff值");
t.print();
}
t = new ConsoleTable();
t.addHeader("体温", "占比");
t.addHeader("", "%");
t.addBody("36.8", "10");
t.addBody("37", "5");
t.print();
Console.log();
t = new ConsoleTable();
t.addHeader("标题1", "标题2");
t.addBody("12345", "混合321654asdfcSDF");
t.addBody("sd e3ee ff22", "ff值");
t.print();
}
}