Domanda

Qual è il modo migliore per stampare le celle di un array String [] [] come una tabella giustificata a destra? Ad esempio, l'input

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

dovrebbe produrre l'output

  x xxx
yyy   y
 zz  zz

Sembra qualcosa che un dovrebbe essere in grado di realizzare usando java.util.Formatter , ma non sembra consentire larghezze di campo non costanti. La risposta migliore utilizzerà un metodo standard per riempire le celle della tabella, non l'inserimento manuale dei caratteri dello spazio.

È stato utile?

Soluzione

In effetti, se specifichi una larghezza per i campi, dovrebbe essere giustificata a destra.
Se devi avere un padding dinamico, minimo per la stringa più lunga, devi camminare sull'array, ottenere la larghezza massima, generare la stringa di formato con la larghezza calcolata da questo massimo e usarla per formattare l'output.

Altri suggerimenti

Ecco una risposta, usando stringhe di formato generate dinamicamente per ogni colonna:

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

trova la lunghezza della stringa più lunga ..
pad sinistro di tutte le stringhe con spazi fino a quando non hanno quella lunghezza + 1
System.out.print li usando 2 nidificati per loop

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top