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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top