HOWTO · Java

Imprimir uma tabela em Java

Este artigo ilustra como imprimir uma tabela em Java

Para imprimir qualquer informação em uma estrutura tabular em Java, podemos usar o método printf() ou format() da classe java.io.PrintStream.

Usando printf() / println() para imprimir uma lista como uma tabela em Java

O método printf(format, arguments) fornece formatação de String. Podemos especificar as regras de formatação usando padrões de formato e as regras começam com %.

Aqui temos uma classe POJO Student com atributos básicos como id, name, age e grae e a classe TestExample onde criamos uma Lista de alunos e imprimimos essa informação em uma tabela formato.

A string de formatação consiste em literais e especificadores de formato, que incluem sinalizadores, largura, precisão e caractere de conversão nesta sequência. Por exemplo %[flags][width][.precision]conversion-charcater. Os especificadores fornecidos entre colchetes são opcionais. O printf usa internamente java.util.Formatter para analisar a string de formato e gerá-la.

O conversion-character determina como a string é formatada. Aqui usamos dois dos mais comuns, s, d e c. O s formata cadeias de caracteres enquanto d formata inteiros decimais e o resultado de c é um caráter Unicode. Portanto, neste código, usamos uma combinação de largura e caractere de conversão para formatar os dados do aluno em uma tabela.

O método printf("%10s %20s %5s %5s %5s", "STUDENT ID", "NAME", "AGE", "GRADE") tem o especificador de formato para formatar os argumentos passados. Assim, %10s, por exemplo, formata uma string com um determinado número de caracteres e também a justifica à direita. O método println() move o cursor para a próxima linha após imprimir o resultado.

O método format("%10s %20s %5d %5c",student.getId(), student.getName(), student.getAge(), student.getGrade()) também tem o especificador de formato e métodos getter de a classe do aluno para obter o valor dos atributos.

import java.util.ArrayList;
import java.util.List;

public class TableExample {
  public static void main(String args[]) {
    List<Student> students = new ArrayList<>();
    students.add(new Student("S101", "John", 8, '4'));
    students.add(new Student("S102", "Leo", 10, '6'));
    students.add(new Student("S103", "Mary", 5, '2'));
    students.add(new Student("S104", "Lisa", 6, '3'));

    System.out.println(
        "-----------------------------------------------------------------------------");
    System.out.printf("%10s %20s %5s %5s", "STUDENT ID", "NAME", "AGE", "GRADE");
    System.out.println();
    System.out.println(
        "-----------------------------------------------------------------------------");
    for (Student student : students) {
      System.out.format("%10s %20s %5d %5c", student.getId(), student.getName(), student.getAge(),
          student.getGrade());
      System.out.println();
    }
    System.out.println(
        "-----------------------------------------------------------------------------");
  }
}
class Student {
  private String id;
  private String name;
  private int age;
  private Character grade;
  Student(String id, String name, int age, Character grade) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.grade = grade;
  }

  public String getId() {
    return id;
  }

  public Character getGrade() {
    return grade;
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }
}

Produção:

-----------------------------------------------------------------------------
STUDENT ID                 NAME   AGE GRADE
-----------------------------------------------------------------------------
      S101                 John     8     4
      S102                  Leo    10     6
      S103                 Mary     5     2
      S104                 Lisa     6     3
-----------------------------------------------------------------------------

Usando System.out.format() para imprimir uma lista como uma tabela em Java

O pacote java.io fornece à classe PrintStream dois métodos usados ​​para substituir print e println. Esses métodos são format() e printf() e são equivalentes. Em format(String format, Object... args), o formato especifica a formatação a ser usada, args, que são a lista de argumentos a serem impressos usando esta formatação.

Aqui, criamos um array 2D de tipo de dados String; as 4 linhas e colunas não são especificadas neste ponto. Significa simplesmente que estamos declarando um array de 4 matrizes. Em seguida, inicializamos cada linha com um objeto String.

Executamos um loop for para cada linha dentro da tabela, um array multidimensional de arrays. Para cada linha, formatamos a linha usando System.out.format() especificando o padrão de formatação para cada linha.

Aqui, %15s significa string justificada à direita com 15 larguras e %n é um separador de linha específico da plataforma.

public class Test1 {
  public static void main(String args[]) {
    String[][] table = new String[4][];
    table[0] = new String[] {"Apple", "Banana", "Papaya"};
    table[1] = new String[] {"Chicken", "Mutton", "Fish"};
    table[2] = new String[] {"Carrots", "Beans", "Cabbage"};
    table[3] = new String[] {"Candy", "Cake", "Bread"};

    for (String[] row : table) {
      System.out.format("%15s %15s %15s %n", row);
    }
  }
}

Produção:

  Apple         Banana         Papaya
Chicken         Mutton           Fish
Carrots          Beans        Cabbage
  Candy           Cake          Bread