web-dev-qa-db-fra.com

Comment imprimer une table d'informations en Java

J'essaie d'imprimer une table en Java et je me demandais quelle était la meilleure façon de procéder.

J'ai essayé d'imprimer de nouvelles lignes et d'utiliser\t pour aligner le contenu, mais cela ne fonctionne pas. Y at-il une méthode qui fait ceci ou une meilleure façon?

8
user2704743

Vous pouvez utiliser System.out.format (...)

Exemple:

final Object[][] table = new String[4][];
table[0] = new String[] { "foo", "bar", "baz" };
table[1] = new String[] { "bar2", "foo2", "baz2" };
table[2] = new String[] { "baz3", "bar3", "foo3" };
table[3] = new String[] { "foo4", "bar4", "baz4" };

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

Résultat:

        foo            bar            baz
       bar2           foo2           baz2
       baz3           bar3           foo3
       foo4           bar4           baz4

Ou utilisez le code suivant pour une sortie alignée à gauche:

System.out.format("%-15s%-15s%-15s\n", row);
13
Luca Mastrostefano

C'est une façon de le faire:

public class StoreItem {

private String itemName;
private double price;
private int quantity;


public StoreItem(String itemName, double price, int quantity) {
    this.setItemName(itemName);
    this.setPrice(price);
    this.setQuantity(quantity);
}


public String getItemName() {
    return itemName;
}

public void setItemName(String itemName) {
    this.itemName = itemName;
}

public double getPrice() {
    return price;
}

public void setPrice(double price) {
    this.price = price;
}

public int getQuantity() {
    return quantity;
}

public void setQuantity(int quantity) {
    this.quantity = quantity;
}


public static void printInvoiceHeader() {
    System.out.println(String.format("%30s %25s %10s %25s %10s", "Item", "|", "Price($)", "|", "Qty"));
    System.out.println(String.format("%s", "----------------------------------------------------------------------------------------------------------------"));
}
public void printInvoice() {
    System.out.println(String.format("%30s %25s %10.2f %25s %10s", this.getItemName(), "|", this.getPrice(), "|", this.getQuantity()));
}

public static List<StoreItem> buildInvoice() {
    List<StoreItem> itemList = new ArrayList<>();
    itemList.add(new StoreItem("Nestle Decaff Coffee", 759.99, 2));
    itemList.add(new StoreItem("Brown's Soft Tissue Paper", 15.80, 2));
    itemList.add(new StoreItem("LG 500Mb External Drive", 700.00, 2));
    return itemList;
}

public static void main (String[] args) {

    StoreItem.printInvoiceHeader();
    StoreItem.buildInvoice().forEach(StoreItem::printInvoice);
 }

}

Sortie:

 enter image description here

2
ojonugwa ochalifu

Ecrivez une fonction qui compresse une chaîne à la longueur de colonne souhaitée avec des espaces. Cela peut être une aide statique, et vous pouvez créer une classe StrUtils ou similaire pour la contenir.

(Il peut aussi y avoir Apache ou d’autres bibliothèques avec String helpers/utils pour le faire pour vous.)

À long terme, si vous produisez des données tabulaires, vous pouvez envisager d'exporter du CSV (pour Excel, etc.) ou du XML. Mais il s’agit des besoins métier à long terme typiques, et pas seulement d’une sortie rapide à l’écran.

1
Thomas W

Fonction générale pour mettre en forme une liste de tableaux:

public static String formatAsTable(List<List<String>> rows)
{
    int[] maxLengths = new int[rows.get(0).size()];
    for (List<String> row : rows)
    {
        for (int i = 0; i < row.size(); i++)
        {
            maxLengths[i] = Math.max(maxLengths[i], row.get(i).length());
        }
    }

    StringBuilder formatBuilder = new StringBuilder();
    for (int maxLength : maxLengths)
    {
        formatBuilder.append("%-").append(maxLength + 2).append("s");
    }
    String format = formatBuilder.toString();

    StringBuilder result = new StringBuilder();
    for (List<String> row : rows)
    {
        result.append(String.format(format, row.toArray(new String[0]))).append("\n");
    }
    return result.toString();
}

Usage:

List<List<String>> rows = new ArrayList<>();
List<String> headers = Arrays.asList("Database", "Maintainer", "First public release date", "Latest stable version", "Latest release date");
rows.add(headers);
rows.add(Arrays.asList("4D (4th Dimension)", "4D S.A.S.", "1984", "v16.0", "2017-01-10"));
rows.add(Arrays.asList("ADABAS", "Software AG", "1970", "8.1", "2013-06"));
rows.add(Arrays.asList("Adaptive Server Enterprise", "SAP AG", "1987", "16.0", "2015"));
rows.add(Arrays.asList("Apache Derby", "Apache", "2004", "10.14.1.0", "2017-10-22"));

System.out.println(formatAsTable(rows));

Le résultat:

Database                    Maintainer   First public release date  Latest stable version  Latest release date  
4D (4th Dimension)          4D S.A.S.    1984                       v16.0                  2017-01-10           
ADABAS                      Software AG  1970                       8.1                    2013-06              
Adaptive Server Enterprise  SAP AG       1987                       16.0                   2015                 
Apache Derby                Apache       2004                       10.14.1.0              2017-10-22    
0
Vadim Zverev