web-dev-qa-db-fra.com

Comment créer une table avec ASCII dans une console?

Je voudrais organiser des informations comme ceci:

Les informations sont organisées avec des cellules, alors qu'avec System.out.println, les informations seraient très désorganisées.

or this

30

Vous pouvez utiliser System.out.format() ou System.out.printf() (printf en interne appelle simplement format pour que les deux méthodes donnent les mêmes résultats).

Vous trouverez ci-dessous un exemple d'alignement de texte à gauche et de remplissage d'espaces inutilisés. Aligner la chaîne à gauche peut être obtenu avec %-15s, ce qui signifie:

  • % réserve (espace réservé)
  • 15 "places" pour les caractères 
  • s de type de données String 
  • - et commencez à les imprimer de gauche à droite. 

Si vous voulez gérer digits, utilisez le suffixe d tel que %-4d pour un maximum de 4 chiffres qui doivent être placés à gauche de la colonne. 

BTW printf n'ajoute pas automatiquement les séparateurs de lignes après les données imprimées. Par conséquent, si vous souhaitez déplacer le curseur sur la ligne suivante, vous devez le faire nous-mêmes. Nous pouvons utiliser \r ou \n, ou laisser Formater générer un séparateur de ligne dépendant du système d'exploitation (comme pour Windows \r\n), nous pouvons utiliser un espace réservé %n (remarque: il ne nécessite aucune donnée comme arguments, Java fournira une séquence correcte sur l'OS).

Vous pouvez trouver plus d'informations sur la syntaxe supportée par Formatter dans documentation de cette classe .

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

sortie

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

Essayez cette alternative: asciitable .

Il propose plusieurs implémentations d'une table de texte, utilisant à l'origine ASCII et les caractères UTF-8 pour les bordures.

Voici un exemple de table:

     ┌───────────────────────────────────────────────── 
 Head En-tête de tableau │ 
 ├──────────────────┬──────────────────┬─────────── 
 │ première ligne (col1) │ avec certains et plus │ encore plus 
 │ information information │ 
 ├──────────────────┼──────────────────┼─────────── 
 │ deuxième rangée │ avec certains et plus │ encore plus 
 (Col1) │ information information │ 
 │ (col2) (col3) │ │ 
 └──────────────────┴──────────────────┴─────────── ───────┴─────────────────┘

Trouvez la dernière version:http://mvnrepository.com/artifact/de.vandermeer/asciitable

Voir aussi:https://stackoverflow.com/a/39806611/363573

24
Stephan

Mon cours que j'ai créé spécialement pour cela est totalement dynamique: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.Java

Vous pouvez l'utiliser comme ceci:

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

Cela ressemblera à ceci avec les caractères unicode (note: sera mieux dans la console puisque tous les caractères sont également larges)

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

Et avec les caractères unicode désactivés (omettez le .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
therealfarfetchd

utiliser System.out.printf()

Par exemple,

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

affichera le contenu de String s, en prenant exactement 10 caractères. Donc, si vous voulez une table, assurez-vous que chaque cellule de la table est imprimée à la même longueur. Notez également que printf() n’imprime pas de nouvelle ligne. Vous devrez donc l’imprimer vous-même.

5
jedyobidan

Vous pouvez utiliser Java-ascii-table . Voir aussi le site de l'auteur .

4
ptyyy

Cela fonctionne aussi plutôt bien http://sourceforge.net/projects/texttablefmt/ . Apache sous licence aussi.

1
Ashwin Jayaprakash

Vous pouvez utiliser string.format () avec la méthode correcte Le code pourrait ressembler à ceci, je suppose

StringBuilder sb=new StringBuilder();

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

En tant que bibliothèque, je ne pense pas qu'il y en ait qui feraient le travail, mais je pourrais me tromper! va effectivement faire des recherches à ce sujet

Regardez également ceci http://docs.Oracle.com/javase/1.5.0/docs/api/Java/util/Formatter.html#syntax

0
Maciej Cygan

TUIAWT vous permet d'utiliser AWT des composants dans une fenêtre de console. Il ne semble pas que cela prenne en charge List ou Table , bien que cela puisse vous donner un point de départ.

0
hd1