class KonsolenTabelle {
// gibt die Zeichenzahl des längsten Strings in der Spalte zurück
private int maxBreite(String[] spalte) {
int max = 0;
for (int i = 0; i < spalte.length; i++) {
if (spalte[i].length() > max) {
max = spalte[i].length();
}
}
return max;
}
// formatiert eine Zeile, benötigt die Zeile und die optimalen Breiten
private String[] formatLine(String[] line, int[] breiten) {
for (int i = 0; i < breiten.length; i++) {
while (line[i].length() < breiten[i] + 2) {
line[i] += " ";
}
}
return line;
}
// gibt die benötigte Breite für jede Spalte in einem Array zurück
private int[] getBreite(String[] head, String[][] matrix) {
String[] curSpalte = new String[matrix[0].length + 1];
int[] breiten = new int[matrix.length];
for (int i = 0; i < matrix[0].length; i++) {
curSpalte[0] = head[i];
for (int j = 0; j < matrix.length; j++) {
curSpalte[j + 1] = matrix[j][i];
}
breiten[i] = maxBreite(curSpalte);
}
return breiten;
}
// gibt die Tabelle aus
private void printTable(String[] head, String[][] matrix) {
for (int i = 0; i < head.length; i++) {
System.out.print(head[i]);
}
System.out.println();
System.out.println();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j]);
}
System.out.println();
}
}
/**
* Benötigt den Tabellenkopf und die dazugehörige Matrix, formatiert beides
* und gibt anschließend die komplette, formatierte Tabelle in der Standardausgabe
* aus
*/
public void printOut(String[] head, String[][] matrix) {
if (head.length != matrix.length) {
System.out.println("Matrix passt nicht zum Head");
}
else {
int[] breiten = getBreite(head, matrix);
head = formatLine(head, breiten);
for (int i = 0; i < matrix[0].length; i++) {
matrix[i] = formatLine(matrix[i], breiten);
}
printTable(head, matrix);
}
}
/**
* Benötigt den Tabellenkopf und die dazugehörige Matrix
* @return
* Gibt die formatierte Matrix zurück
*/
public String[][] getFormattedMatrix(String[] head, String[][] matrix) {
if (head.length != matrix.length) {
return null;
}
else {
int[] breiten = getBreite(head, matrix);
for (int i = 0; i < matrix[0].length; i++) {
matrix[i] = formatLine(matrix[i], breiten);
}
return matrix;
}
}
/**
* Benötigt den Tabellenkopf und die dazugehörige Matrix
* @return
* Gibt den formatierten Tabellenkopf zurück
*/
public String[] getFormattedHead(String[] head, String[][] matrix) {
if (head.length != matrix.length) {
return null;
}
else {
int[] breiten = getBreite(head, matrix);
head = formatLine(head, breiten);
return head;
}
}
}