2 votes

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

Quel est le meilleur manière d'imprimer les cellules d'un String[][] comme un tableau justifié à droite ? Par exemple, l'entrée

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

devrait donner le résultat suivant

  x xxx
yyy   y
 zz  zz

Cela semble être quelque chose que l'on devrait être en mesure d'accomplir en utilisant java.util.Formatter mais il ne semble pas autoriser les largeurs de champ non constantes. La meilleure solution consistera à utiliser une méthode standard pour remplir les cellules du tableau, et non à insérer manuellement des caractères d'espacement.

4voto

PhiLho Points 23458

En effet, si vous spécifiez une largeur pour les champs, elle 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.

4voto

Chris Conway Points 24671

Voici une réponse, qui utilise 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$" + 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]);
    }
  }
}

1voto

adi92 Points 4589

trouver la longueur de la plus longue chaîne
Remplir à gauche toutes les chaînes de caractères avec des espaces jusqu'à ce qu'elles atteignent cette longueur + 1.
System.out.print en utilisant 2 boucles for imbriquées

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X