java生成控制台表格的源码,需要有构造方法,指定列的行数与是否需要表头,可以自己添加一行,每一列可自行插入列的数据
时间: 2024-03-03 22:49:03 浏览: 16
下面是一个示例的Java代码,可以生成控制台表格:
```java
import java.util.ArrayList;
import java.util.List;
public class ConsoleTable {
private List<String[]> rows = new ArrayList<String[]>();
private int[] widths;
private boolean hasHeader;
public ConsoleTable(int columns, int rows, boolean hasHeader) {
this.widths = new int[columns];
this.hasHeader = hasHeader;
if (hasHeader) {
this.rows.add(new String[columns]);
for (int i = 0; i < columns; i++) {
this.rows.get(0)[i] = "Column " + (i + 1);
this.widths[i] = this.rows.get(0)[i].length();
}
}
for (int i = 0; i < rows; i++) {
this.rows.add(new String[columns]);
for (int j = 0; j < columns; j++) {
this.rows.get(i + (hasHeader ? 1 : 0))[j] = "";
}
}
}
public void setHeader(String... header) {
if (!hasHeader) {
this.rows.add(0, header);
hasHeader = true;
}
}
public void addRow(String... row) {
if (row.length != widths.length) {
throw new IllegalArgumentException("Invalid number of columns.");
}
for (int i = 0; i < row.length; i++) {
widths[i] = Math.max(widths[i], row[i].length());
}
this.rows.add(row);
}
public void print() {
for (int i = 0; i < rows.size(); i++) {
String[] row = rows.get(i);
for (int j = 0; j < row.length; j++) {
String format = "| %" + widths[j] + "s ";
System.out.printf(format, row[j]);
}
System.out.println("|");
if (i == 0 && hasHeader) {
for (int j = 0; j < row.length; j++) {
String format = "+-%" + widths[j] + "s-";
System.out.printf(format, "-".repeat(widths[j]));
}
System.out.println("+");
}
}
}
}
```
这个类可以通过构造函数指定表格的列数、行数和是否要表头。然后,可以使用`setHeader()`方法设置表头,使用`addRow()`方法添加一行数据。最后,调用`print()`方法可以将整个表格输出到控制台。
例如,下面是一个使用示例:
```java
public static void main(String[] args) {
ConsoleTable table = new ConsoleTable(3, 3, true);
table.setHeader("ID", "Name", "Age");
table.addRow("001", "Alice", "20");
table.addRow("002", "Bob", "30");
table.addRow("003", "Charlie", "40");
table.print();
}
```
输出结果如下:
```
+-----+---------+-----+
| ID | Name | Age |
+-----+---------+-----+
| 001 | Alice | 20 |
| 002 | Bob | 30 |
| 003 | Charlie | 40 |
+-----+---------+-----+
```