webentwicklung-frage-antwort-db.com.de

Wie kann ich eine Tabelle erstellen? ASCII in einer Konsole

Ich möchte Informationen wie diese organisieren:

Die Informationen sind in Zellen organisiert, während mit System.out.println die Informationen sehr unstrukturiert wären.

or this

30

Sie können System.out.format() oder System.out.printf() verwenden (printf ruft intern einfach format auf, sodass beide Methoden dieselben Ergebnisse liefern).

Nachfolgend finden Sie ein Beispiel, bei dem Text links ausgerichtet wird und ungenutzte Stellen mit Leerzeichen gefüllt werden. Das Ausrichten von String nach links kann mit %-15s erreicht werden. Dies bedeutet:

  • % reservieren (Platzhalter)
  • 15 "stellt" für Zeichen ein 
  • s des Datentyps String 
  • - und beginne den Druck von links. 

Wenn Sie Ziffernverwenden möchten, verwenden Sie d als Suffix wie %-4d für maximal 4 Ziffern, die links neben der Spalte stehen sollen. 

BTW printf fügt nach den gedruckten Daten keine automatischen Trennzeichen ein. Wenn Sie also den Cursor zur nächsten Zeile bewegen möchten, müssen Sie dies selbst tun. Wir können \r oder \n verwenden, oder um Formatter OS-abhängige Zeilentrennzeichen generieren zu lassen (wie für Windows \r\n). Wir können %n-Platzhalter verwenden (Hinweis: Es werden keine Daten als Argumente benötigt, Java wird korrekt angeben Sequenz basierend auf OS).

Weitere Informationen zur von Formatter unterstützten Syntax finden Sie unter Dokumentation dieser Klasse .

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

ausgabe

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

Versuchen Sie diese Alternative: Asciitable .

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

Hier ist eine Beispieltabelle:

     ┌───────────────────────────────────────────────── ─────────────────────────┐ 
 │ Tabellenüberschrift │ 
 ├──────────────────┬──────────────────┬─────────── ───────┬─────────────────┤ 
 │ erste Reihe (Spalte 1) │ mit einigen │ und mehr │ noch mehr │ 
 │ │ Informationen │ Informationen │ │ 
 ├──────────────────┼──────────────────┼─────────── ───────┼─────────────────┤ 
 │ zweite Reihe │ mit einigen │ und mehr │ noch mehr │ 
 Col (Spalte 1) │ Information │ Information │ │ 
 Col │ (Spalte 2) │ (Spalte 3) │ │ 
 └──────────────────┴──────────────────┴─────────── ───────┴─────────────────┘

Finden Sie die neueste Version:http://mvnrepository.com/artifact/de.vandermeer/asciitable

Siehe auch:https://stackoverflow.com/a/39806611/363573

24
Stephan

Meine Klasse, die ich speziell dafür erstellt habe, ist vollkommen dynamisch: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.Java

Sie können es so 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();

Bei Unicode-Zeichen sieht das so aus (Anmerkung: wird in der Konsole besser aussehen, 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 von .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]
7

benutze System.out.printf()

Zum Beispiel,

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

druckt den Inhalt von String s aus und benötigt genau 10 Zeichen. Wenn Sie also eine Tabelle wünschen, vergewissern Sie sich, dass jede Zelle in der Tabelle auf die gleiche Länge gedruckt wird. Beachten Sie auch, dass printf() keine neue Zeile druckt. Sie müssen diese also selbst ausdrucken.

5
jedyobidan

Sie könnten Java-ascii-table verwenden. Siehe auch die Autorenseite .

4
ptyyy

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

1

Sie können die Spring Shell-Dienstprogrammklasse org.springframework.Shell.table.TableModel verwenden:

      TableModel model = new BeanListTableModel<>(portConfigurations, headers);
    TableBuilder tableBuilder = new TableBuilder(model);
    tableBuilder.addFullBorder(BorderStyle.oldschool);
    //TableUtils.applyStyle(tableBuilder);
    return tableBuilder.build().render(100);
0
user2600734

Sie können string.format () mit der korrekten Methode .__ verwenden. Code könnte in etwa so aussehen, denke ich

StringBuilder sb=new StringBuilder();

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

Was die Bibliothek angeht, glaube ich nicht, dass es irgendeinen gibt, der die Arbeit machen würde, aber ich könnte mich irren! forscht eigentlich darüber

Schauen Sie sich auch diese http://docs.Oracle.com/javase/1.5.0/docs/api/Java/util/Formatter.html#syntax an.

0
Maciej Cygan

TUIAWT ermöglicht die Verwendung von AWT Komponenten in einem Konsolenfenster. Es sieht zwar nicht so aus, als würde es List oder Table unterstützen, aber es kann Ihnen einen Startpunkt geben.

0
hd1