Pergunta

O que é a melhor maneira de imprimir as células de uma matriz String[][] como uma tabela justificado direita? Por exemplo, a entrada

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

deve produzir a saída

  x xxx
yyy   y
 zz  zz

Este parece ser algo que um deve ser capaz de realizar usando java.util.Formatter, mas não parecem permitir larguras de campo não constantes. A melhor resposta vai usar algum método padrão para acolchoar as células da tabela, e não a introdução manual do caracteres de espaço.

Foi útil?

Solução

Na verdade, se você especificar uma largura para os campos, deve ser justificado direita.
Se você precisa ter uma cobertura dinâmica, mínimo para a cadeia mais longa, você tem que andar a matriz, ficando a largura máxima, gerar a string de formato com a largura calculado a partir desta maxima, e usá-lo para o formato de saída.

Outras dicas

Aqui está uma resposta, usando cordas do formato geradas dinamicamente para cada coluna:

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

encontrar o comprimento da maior string ..
almofada esquerda todas as cordas com espaços até que eles r que o comprimento + 1 | System.out.print-los usando 2 aninhados loops

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top