Java: Imprimer un tableau de chaînes 2D sous forme de tableau justifié à droite
-
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.
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