Chciałbym organizować informacje tak:Jak utworzyć tabelę przy użyciu ASCII w konsoli?
Informacje te są organizowane z komórek, podczas gdy z System.out.println
informacja byłaby bardzo chaotyczna.
Chciałbym organizować informacje tak:Jak utworzyć tabelę przy użyciu ASCII w konsoli?
Informacje te są organizowane z komórek, podczas gdy z System.out.println
informacja byłaby bardzo chaotyczna.
Spróbuj użyć System.out.format()
lub System.out.printf()
(printf
po prostu wywołuje format
, więc obie metody dają takie same wyniki).
Oto prosty przykład, który spróbuje wyrównać tekst do lewej i wypełnić nieużywane miejsca spacjami. Wyrównanie ciągu znaków do lewej można uzyskać, ustawiając %-15s
, co oznacza rezerwowanie 15
miejsc dla danych ciągów znaków (s
) i zapisywanie ich od lewej (-
). Jeśli chcesz dodać cyfry, należy użyć przyrostka d
, takiego jak %-4d
, dla max 4 cyfr, które należy umieścić po lewej stronie kolumny.
BTW Użyłem %n
zamiast \n
do reprezentowania sekwencji separatora linii używanej przez bieżący system operacyjny, tak jak w przypadku systemu Windows będzie to \r\n
.
Więcej informacji można znaleźć pod adresem 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");
wyjście
+-----------------+------+
| Column name | ID |
+-----------------+------+
| some data0 | 0 |
| some data1 | 1 |
| some data2 | 4 |
| some data3 | 9 |
| some data4 | 16 |
+-----------------+------+
Idealna odpowiedź !! ¡Dziękuję bardzo! Mogę zrobić, że chciałem =) –
Dla stałych wymagań, to rozwiązanie jest idealne. W przypadku bardziej rzeczywistych przypadków użycia, bardziej odpowiednia jest biblioteka. Zobacz tę odpowiedź: http://stackoverflow.com/a/35961774/363573. – Stephan
użycie System.out.printf()
Na przykład
String s = //Any string
System.out.printf(%10s, s);
wypisze zawartość String s, zajmując dokładnie 10 znaków. Więc jeśli chcesz mieć stół, upewnij się, że każda komórka w tabeli jest wydrukowana na tej samej długości. Zauważ również, że printf()
nie drukuje nowej linii, więc będziesz musiał wydrukować ją samodzielnie.
Można użyć String.Format() z prawidłowym sposobie kod mógłby wyglądać mniej więcej tak myślę
StringBuilder sb=new StringBuilder();
for(int i = 1; i <= numberOfColumns; i++)
{
sb.append(String.format(%-10s,rsMetaData.getColumnLabel(i);
}
Jako biblioteki nie sądzę, że istnieje jakikolwiek by wykonać zadanie, jednak mogę być błędny! rzeczywiście zrobić badania na nim
Mają również spojrzeć na ten http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax
Można użyć java-ascii-table. Zobacz także the author's site.
Java-ascii-table wydaje się porzucony. Zobacz tę odpowiedź, aby uzyskać alternatywę: http://stackoverflow.com/a/35961774/363573 – Stephan
Działa to również całkiem dobrze http://sourceforge.net/projects/texttablefmt/. Apache jest również licencjonowany.
texttablefmt nie wydaje się być dostępny na Maven. Oto inna biblioteka dostępna na Maven: http://stackoverflow.com/a/35961774/363573 – Stephan
Spróbuj tego alternatywnego: asciitable.
Oferuje kilka implementacji tabeli tekstowej, pierwotnie używających znaków ASCII i UTF-8 dla granic.
Oto tabela próbki:
┌──────────────────────────────────────────────────────────────────────────┐ │ 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) │ │ └──────────────────┴──────────────────┴──────────────────┴─────────────────┘
Znajdź najnowszą wersję:http://mvnrepository.com/artifact/de.vandermeer/asciitable
Zobacz także: https://stackoverflow.com/a/39806611/363573
Moja klasa I stworzony specjalnie dla tego rozwiązania jest to całkowicie dynamiczny: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.java
Można go używać tak:
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();
To będzie wyglądać następująco Unicode znaków (uwaga: będzie wyglądać lepiej w konsoli, gdyż wszystkie znaki są jednakowo szerokie):
┌─────────┬─────────────────────────────────────────────────────────────────────────┬────────────────────────────┐
│ 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] ┃
┗━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
I z wyłączonym unicode (pomiń .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]
+1. To nie jest złe pytanie. Jeśli ktoś ma do tego dobrą bibliotekę, polecam. W przeciwnym razie spójrz na System.out.format – Thilo
Możesz sprawdzić [to] (http://stackoverflow.com/questions/15193812/how-to-print-a-table-of-arrays/15194265#15194265) na przykład – MadProgrammer
Twoje najlepsze zakłady polegają głównie na użyciu 'System.out.printf (...)' i odpowiednika 'System.out.format (...)'. –