2013-03-05 17 views
22

Chciałbym organizować informacje tak:Jak utworzyć tabelę przy użyciu ASCII w konsoli?

Informacje te są organizowane z komórek, podczas gdy z System.out.println informacja byłaby bardzo chaotyczna.

or this

+2

+1. To nie jest złe pytanie. Jeśli ktoś ma do tego dobrą bibliotekę, polecam. W przeciwnym razie spójrz na System.out.format – Thilo

+1

Możesz sprawdzić [to] (http://stackoverflow.com/questions/15193812/how-to-print-a-table-of-arrays/15194265#15194265) na przykład – MadProgrammer

+0

Twoje najlepsze zakłady polegają głównie na użyciu 'System.out.printf (...)' i odpowiednika 'System.out.format (...)'. –

Odpowiedz

38

Spróbuj użyć System.out.format() lub System.out.printf() (printf po prostu wywołuje format, więc obie metody dają takie same wyniki).

Oto prosty przykład, który spróbuje wyrównać tekst do lewej i wypełnić nieużywane miejsca spacjami. Wyrównanie ciągu znaków do lewej można uzyskać, ustawiając %-15s, co oznacza rezerwowanie 15 miejsc dla danych ciągów znaków (s) i zapisywanie ich od lewej (-). Jeśli chcesz dodać cyfry, należy użyć przyrostka d, takiego jak %-4d, dla max 4 cyfr, które należy umieścić po lewej stronie kolumny.
BTW Użyłem %n zamiast \n do reprezentowania sekwencji separatora linii używanej przez bieżący system operacyjny, tak jak w przypadku systemu Windows będzie to \r\n.

Więcej informacji można znaleźć pod adresem Formatter class documentation.

String leftAlignFormat = "| %-15s | %-4d |%n"; 

System.out.format("+-----------------+------+%n"); 
System.out.format("| Column name  | ID |%n"); 
System.out.format("+-----------------+------+%n"); 
for (int i = 0; i < 5; i++) { 
    System.out.format(leftAlignFormat, "some data" + i, i * i); 
} 
System.out.format("+-----------------+------+%n"); 

wyjście

+-----------------+------+ 
| Column name  | ID | 
+-----------------+------+ 
| some data0  | 0 | 
| some data1  | 1 | 
| some data2  | 4 | 
| some data3  | 9 | 
| some data4  | 16 | 
+-----------------+------+ 
+0

Idealna odpowiedź !! ¡Dziękuję bardzo! Mogę zrobić, że chciałem =) –

+0

Dla stałych wymagań, to rozwiązanie jest idealne. W przypadku bardziej rzeczywistych przypadków użycia, bardziej odpowiednia jest biblioteka. Zobacz tę odpowiedź: http://stackoverflow.com/a/35961774/363573. – Stephan

5

użycie System.out.printf()

Na przykład

String s = //Any string 
System.out.printf(%10s, s); 

wypisze zawartość String s, zajmując dokładnie 10 znaków. Więc jeśli chcesz mieć stół, upewnij się, że każda komórka w tabeli jest wydrukowana na tej samej długości. Zauważ również, że printf() nie drukuje nowej linii, więc będziesz musiał wydrukować ją samodzielnie.

0

Można użyć String.Format() z prawidłowym sposobie kod mógłby wyglądać mniej więcej tak myślę

StringBuilder sb=new StringBuilder(); 

for(int i = 1; i <= numberOfColumns; i++) 
{ 
     sb.append(String.format(%-10s,rsMetaData.getColumnLabel(i); 
} 

Jako biblioteki nie sądzę, że istnieje jakikolwiek by wykonać zadanie, jednak mogę być błędny! rzeczywiście zrobić badania na nim

Mają również spojrzeć na ten http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

0

TUIAWT pozwala używać AWT składników w oknie konsoli. Nie wygląda jednak na to, że obsługuje List lub Table, ale może dać ci punkt wyjścia.

+0

Od tego pisania ostatnia aktualizacja TUIAWT wydaje się być w marcu 2015. – Stephan

1

Działa to również całkiem dobrze http://sourceforge.net/projects/texttablefmt/. Apache jest również licencjonowany.

+0

texttablefmt nie wydaje się być dostępny na Maven. Oto inna biblioteka dostępna na Maven: http://stackoverflow.com/a/35961774/363573 – Stephan

13

Spróbuj tego alternatywnego: asciitable.

Oferuje kilka implementacji tabeli tekstowej, pierwotnie używających znaków ASCII i UTF-8 dla granic.

Oto tabela próbki:

 ┌──────────────────────────────────────────────────────────────────────────┐ 
    │ Table Heading               │ 
    ├──────────────────┬──────────────────┬──────────────────┬─────────────────┤ 
    │ first row (col1) │ with some  │ and more   │ even more  │ 
    │     │ information  │ information  │     │ 
    ├──────────────────┼──────────────────┼──────────────────┼─────────────────┤ 
    │ second row  │ with some  │ and more   │ even more  │ 
    │ (col1)   │ information  │ information  │     │ 
    │     │ (col2)   │ (col3)   │     │ 
    └──────────────────┴──────────────────┴──────────────────┴─────────────────┘

Znajdź najnowszą wersję:http://mvnrepository.com/artifact/de.vandermeer/asciitable

Zobacz także: https://stackoverflow.com/a/39806611/363573

5

Moja klasa I stworzony specjalnie dla tego rozwiązania jest to całkowicie dynamiczny: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.java

Można go używać tak:

TableList tl = new TableList(3, "ID", "String 1", "String 2").sortBy(0).withUnicode(true); 
// from a list 
yourListOrWhatever.forEach(element -> tl.addRow(element.getID(), element.getS1(), element.getS2())); 
// or manually 
tl.addRow("Hi", "I am", "Bob"); 

tl.print(); 

To będzie wyglądać następująco Unicode znaków (uwaga: będzie wyglądać lepiej w konsoli, gdyż wszystkie znaki są jednakowo szerokie):

┌─────────┬─────────────────────────────────────────────────────────────────────────┬────────────────────────────┐ 
│ Command │ Description                │ Syntax      │ 
┢━━━━━━━━━╈━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╈━━━━━━━━━━━━━━━━━━━━━━━━━━━━┪ 
┃ bye  ┃ Quits the application.             ┃       ┃ 
┃ ga  ┃ Adds the specified game.            ┃ <id> <description> <path> ┃ 
┃ gl  ┃ Lists all currently added games           ┃ [pattern]     ┃ 
┃ gr  ┃ Rebuilds the files of the currently active game.      ┃       ┃ 
┃ gs  ┃ Selects the specified game.            ┃ <id>      ┃ 
┃ help ┃ Lists all available commands.           ┃ [pattern]     ┃ 
┃ license ┃ Displays licensing info.            ┃       ┃ 
┃ ma  ┃ Adds a mod to the currently active game.        ┃ <id> <file>    ┃ 
┃ md  ┃ Deletes the specified mod and removes all associated files.    ┃ <id>      ┃ 
┃ me  ┃ Toggles if the selected mod is active.         ┃ <id>      ┃ 
┃ ml  ┃ Lists all mods for the currently active game.       ┃ [pattern]     ┃ 
┃ mm  ┃ Moves the specified mod to the specified position in the priority list. ┃ <id> <position>   ┃ 
┃ top kek ┃ Test command. Do not use, may cause death and/or destruction   ┃       ┃ 
┃ ucode ┃ Toggles advanced unicode. (Enhanced characters)       ┃ [on|true|yes|off|false|no] ┃ 
┗━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 

I z wyłączonym unicode (pomiń .withUnicode (true)):

Command | Description                | Syntax      
--------+-------------------------------------------------------------------------+--------------------------- 
bye  | Quits the application.             |       
ga  | Adds the specified game.            | <id> <description> <path> 
gl  | Lists all currently added games           | [pattern]     
gr  | Rebuilds the files of the currently active game.      |       
gs  | Selects the specified game.            | <id>      
help | Lists all available commands.           | [pattern]     
license | Displays licensing info.            |       
ma  | Adds a mod to the currently active game.        | <id> <file>    
md  | Deletes the specified mod and removes all associated files.    | <id>      
me  | Toggles if the selected mod is active.         | <id>      
ml  | Lists all mods for the currently active game.       | [pattern]     
mm  | Moves the specified mod to the specified position in the priority list. | <id> <position>   
top kek | Test command. Do not use, may cause death and/or destruction   |       
ucode | Toggles advanced unicode. (Enhanced characters)       | [on|true|yes|off|false|no] 
Powiązane problemy