Java: ein 2D-String-Array als rechtsbündige Tabelle drucken
-
07-07-2019 - |
Frage
Was ist der am besten , um die Zellen eines String[][]
Array als rechtsbündige Tabelle zu drucken? Zum Beispiel kann die Eingabe
{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }
sollte die Ausgabe ergibt
x xxx
yyy y
zz zz
Dies scheint wie etwas, das man sollte der Lage sein, mit java.util.Formatter
zu erreichen, aber es scheint nicht, nicht konstante Feldbreiten zu ermöglichen. Die beste Antwort wird einige Standard-Methode verwenden, um die Tabellenzellen zum Klotzen, nicht das manuelle Einfügen von Leerzeichen.
Lösung
Ja, wenn Sie eine Breite für die Felder angeben, sollte es rechtsbündig sein.
Wenn Sie eine dynamische Polsterung, minimal für die längste Zeichenfolge haben müssen, müssen Sie das Array gehen, die maximale Breite bekommen, erzeugen den Format-String mit der Breite von diesen Maxima berechnet wird, und verwenden Sie es für Format der Ausgabe.
Andere Tipps
Hier ist eine Antwort, mit dynamisch generierten Format-Strings für jede Spalte:
public static void printTable(String[][] table) {
// Find out what the maximum number of columns is in any row
int maxColumns = 0;
for (int i = 0; i < table.length; i++) {
maxColumns = Math.max(table[i].length, maxColumns);
}
// Find the maximum length of a string in each column
int[] lengths = new int[maxColumns];
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
lengths[j] = Math.max(table[i][j].length(), lengths[j]);
}
}
// Generate a format string for each column
String[] formats = new String[lengths.length];
for (int i = 0; i < lengths.length; i++) {
formats[i] = "%1$" + lengths[i] + "s"
+ (i + 1 == lengths.length ? "\n" : " ");
}
// Print 'em out
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
System.out.printf(formats[j], table[i][j]);
}
}
}
finden Sie die Länge der längsten Zeichenkette ..
links-Pad alle Fäden mit Leerzeichen, bis sie diese Länge + 1 | r
System.out.print sie mit 2 for-Schleifen verschachtelt