Как создать таблицу с помощью ASCII в консоли?

Я хотел бы организовать такую информацию:

информация организована с ячейками, тогда как с System.out.println информация будет очень дезорганизованной.

or this

8 ответов


можно использовать System.out.format() или System.out.printf() (printf внутренне просто вызывает format таким образом, оба метода дают одинаковые результаты).

ниже вы найдете пример, который выровняет текст влево и заполнит неиспользуемые места пробелами. Выравнивание строки влево может быть достигнуто с помощью %-15s, что означает:

  • % резерв (заполнитель)
  • 15 "места" для символов
  • s строкового типа данных
  • - и начните печатать их слева.

если вы хотите обрабатывать цифры использовать d суффикс как %-4d для максимальных 4 чисел числа которые должны быть помещены на левой стороне столбца.

кстати printf не добавляет автоматически разделители строк после печати данных, поэтому, если wan хочет переместить курсор на следующую строку, нам нужно сделать это самостоятельно. Мы можем использовать \r или \n, или позволить Formatter генерировать ОС зависимый разделитель строк (например, для Windows \r\n) мы можем использовать %n заполнитель (Примечание: он не требует каких-либо данных в качестве аргументов, Java обеспечит правильную последовательность на основе ОС).

вы можете найти более подробную информацию о синтаксисе поддерживается Formatter at документация этого класса.

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

выход

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

попробуйте этот вариант: asciitable.

он предлагает несколько реализаций текстовой таблицы, первоначально используя символы ASCII и UTF-8 для границ.

вот пример таблицы:

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

найти последнюю версию: http://mvnrepository.com/artifact/de.vandermeer/asciitable

Читайте также: https://stackoverflow.com/a/39806611/363573


мой класс, который я создал специально для этого, полностью динамичен: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.java

вы можете использовать его как это:

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

это будет выглядеть так с символами unicode (Примечание: будет выглядеть лучше в консоли, так как все символы одинаково широки):

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

и с символами unicode off (опустить .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]

использовать System.out.printf()

например,

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

выводит содержимое строки s, занимая ровно 10 символов. Поэтому, если вам нужна таблица, просто убедитесь, что каждая ячейка в таблице распечатана на ту же длину. Также обратите внимание, что printf() не печатает новую строку, поэтому вам придется распечатать ее самостоятельно.


можно использовать java-ascii-table. См. также сайт автора.


Это также работает довольно хорошо http://sourceforge.net/projects/texttablefmt/. Apache тоже лицензирован.


вы можете использовать string.формат() с правильным методом Код может выглядеть примерно так думаю

StringBuilder sb=new StringBuilder();

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

Что касается библиотеки, я не думаю, что есть что-то, что сделает эту работу, однако я могу ошибаться! будет на самом деле делать исследования на нем

также взгляните на это http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax


TUIAWT можно использовать AWT компоненты в окне консоли. Не похоже, что он поддерживает список или стол, хотя, но это может дать вам отправную точку.