2013-03-05 9 views
22

Ich möchte Informationen so organisieren:Wie kann ich Tabellen mit ASCII in einer Konsole erstellen?

Die Informationen werden mit Zellen organisiert, während bei System.out.println würde die Information sehr unorganisiert sein.

or this

+2

+1. Keine schlechte Frage. Wenn jemand eine gute Bibliothek dafür hat, empfehlen Sie bitte. Schauen Sie sich andernfalls System.out.format an. – Thilo

+1

Sie können [this] (http://stackoverflow.com/questions/15193812/how-to-print-a-table-of-arrays/15194265#15194265) für eine Beispiel – MadProgrammer

+0

Ihre beste Wette besteht hauptsächlich darin, 'System.out.printf (...)' und das entsprechende 'System.out.format (...)' zu verwenden. –

Antwort

38

Versuchen Sie mit System.out.format() oder System.out.printf() (printf ruft einfach format so beide Methoden gibt die gleichen Ergebnisse).

Hier haben Sie ein einfaches Beispiel, das versuchen wird, Text nach links auszurichten und unbenutzte Stellen mit Leerzeichen zu füllen. Die Ausrichtung von Strings nach links kann mit %-15s erreicht werden, was bedeutet, dass 15 Stellen für string (s) Daten reserviert werden und mit dem Schreiben von links (-) begonnen werden kann. Wenn Sie Ziffern hinzufügen möchten, verwenden Sie d Suffix wie %-4d für max. 4-stellige Zahlen, die auf der linken Seite der Spalte platziert werden sollen.
BTW Ich verwendete %n anstelle von \n, um Zeilentrennzeichen Sequenz von aktuellen OS wie für Windows verwendet wird es \r\n sein.

Weitere Informationen finden Sie unter 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"); 

Ausgang

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

¡¡Eine perfekte Antwort !! ¡Vielen Dank! Ich könnte tun, dass ich wollte =) –

+0

Für feste Anforderungen ist diese Lösung perfekt. Für mehr reale Anwendungsfälle ist eine Bibliothek besser geeignet. Siehe diese Antwort: http://stackoverflow.com/a/35961774/363573. – Stephan

5

Verwendung System.out.printf()

Zum Beispiel

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

wird aus dem Inhalt von String s drucken, genau 10 Zeichen aufzunehmen. Wenn Sie also eine Tabelle wünschen, stellen Sie sicher, dass jede Zelle in der Tabelle auf die gleiche Länge gedruckt wird. Beachten Sie auch, dass printf() keine neue Zeile ausgibt, Sie müssen sie also selbst ausdrucken.

0

können Sie verwenden string.format() mit der richtigen Methode -Code wie folgt aussehen könnte ich denke

StringBuilder sb=new StringBuilder(); 

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

Ab Bibliothek ich dort nicht denken, ist einer, der die Arbeit machen würde, aber ich könnte falsch! tatsächlich auf sie Forschung

haben auch einen Blick auf dieses http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

0

TUIAWT können Sie AWT Komponenten in einem Konsolenfenster verwenden. Es sieht nicht so aus, als ob es List oder Table unterstützt, aber es kann Ihnen einen Ausgangspunkt geben.

+0

Zum Zeitpunkt des Schreibens der letzten Aktualisierung TUIAWT scheint im März 2015 zu sein. – Stephan

4

könnten Sie java-ascii-table verwenden. Siehe auch the author's site.

+3

Java-Ascii-Tabelle scheint aufgegeben zu sein. Finden Sie diese Antwort für eine Alternative: http://Stackoverflow.com/a/35961774/363573 – Stephan

1

Dies funktioniert auch ziemlich gut http://sourceforge.net/projects/texttablefmt/. Apache lizenziert auch.

+0

Texttablefmt scheint nicht auf Maven verfügbar sein. Hier ist eine weitere Bibliothek auf Maven verfügbar: http://StackOverflow.com/A/35961774/363573 – Stephan

13

Versuchen Sie diese Alternative: asciitable.

Es bietet mehrere Implementierungen einer Texttabelle, ursprünglich mit ASCII- und UTF-8-Zeichen für Rahmen.

Hier eine Beispieltabelle:

 ┌──────────────────────────────────────────────────────────────────────────┐ 
    │ 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)   │     │ 
    └──────────────────┴──────────────────┴──────────────────┴─────────────────┘

Hier finden Sie die neueste Version: auchhttp://mvnrepository.com/artifact/de.vandermeer/asciitable

See: https://stackoverflow.com/a/39806611/363573

5

Meine Klasse I das speziell geschaffen dafür ist vollständig dynamisch: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.java

Sie können es wie folgt verwenden:

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

Es ist wie diese mit Unicode-Zeichen aussehen wird (Anmerkung: besser aussehen wird in der Konsole, da alle Zeichen gleich breit sind):

┌─────────┬─────────────────────────────────────────────────────────────────────────┬────────────────────────────┐ 
│ 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] ┃ 
┗━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 

Und mit Unicode-Zeichen aus (weglassen der .withUnicode (true)):

Verwandte Themen