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.
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 |
+-----------------+------+
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
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]
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.
Vous pouvez utiliser Java-ascii-table . Voir aussi le site de l'auteur .
Cela fonctionne aussi plutôt bien http://sourceforge.net/projects/texttablefmt/ . Apache sous licence aussi.
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