2013-09-07 19 views
7

Próbuję wydrukować tabelę w Javie i zastanawiałem się, jaki jest najlepszy sposób na zrobienie tego?Jak wydrukować tabelę informacji w Javie

Próbowałem już wydrukować nowe linie i użyć \ t, aby zawartość była wyrównana, ale nie działa. Czy istnieje metoda, która robi to lub lepszy sposób?

+0

Look w formacie smyczkowy z wyrównania. –

Odpowiedz

10

Można użyć System.out.format (...)

Przykład:

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

Wynik:

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

Albo użyć następującego kodu dla wyjścia wyrównany do lewej strony:

System.out.format("%-15s%-15s%-15s\n", row); 
+0

czy można to zrobić dla dowolnej liczby elementów? – corvid

+0

Przepraszam, corvid, nie rozumiem twojego pytania. Czy możesz to lepiej wyjaśnić? –

+0

Czy istnieje sposób, aby opuścić to raczej niż prawe? –

1

Napisz funkcję, która wstawia ciąg znaków do żądanej długości kolumny ze spacjami. Może to być statyczny pomocnik i możesz utworzyć klasę StrUtils lub podobną do jej przechowywania.

(Nie mogą być również inne biblioteki Apache lub z pomocników ŁAŃCUCH/utils to zrobić dla ciebie.)

długoterminowa, jeśli wyprowadzania danych tabelarycznych można rozważyć eksportu CSV (Excel itp) lub XML. Są to jednak typowe długoterminowe wymagania biznesowe, a nie tylko szybkie wyświetlanie na ekranie.

+0

OK dziękuję za pomoc Przyjrzyj się niektórym funkcjom ciągów znaków – user2704743

1

To jest jeden sposób to zrobić:

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

}

wyjściowa:

enter image description here