Java: Imprimer un tableau de chaînes 2D sous forme de tableau justifié à droite

StackOverflow https://stackoverflow.com/questions/275338

  •  07-07-2019
  •  | 
  •  

Question

Quel est le meilleur moyen d'imprimer les cellules d'un tableau String [] [] sous forme de tableau justifié à droite? Par exemple, l'entrée

{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }

devrait donner le résultat

  x xxx
yyy   y
 zz  zz

Cela semble être quelque chose qu’un devrait pouvoir accomplir en utilisant java.util.Formatter , mais cela ne semble pas autoriser des largeurs de champ non constantes. La meilleure solution consiste à utiliser une méthode standard pour remplir les cellules du tableau, et non à insérer manuellement des espaces.

Était-ce utile?

La solution

En effet, si vous spécifiez une largeur pour les champs, celle-ci doit être justifiée à droite.
Si vous avez besoin d'un remplissage dynamique, minimal pour la chaîne la plus longue, vous devez parcourir le tableau, obtenir la largeur maximale, générer la chaîne de format avec la largeur calculée à partir de ce maximum et l'utiliser pour formater la sortie.

Autres conseils

Voici une réponse en utilisant des chaînes de format générées dynamiquement pour chaque colonne:

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<*>quot; + 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]);
    }
  }
}

trouvez la longueur de la plus longue chaîne ..
pad gauche toutes les cordes avec des espaces jusqu'à ce qu'elles aient cette longueur + 1
System.out.imprimez-les avec 2 boucles imbriquées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top