2013-03-05 66 views
22

Tôi muốn tổ chức thông tin như thế này:Làm cách nào để tạo bảng bằng ASCII trong bảng điều khiển?

Các thông tin được tổ chức với các tế bào, trong khi với System.out.println thông tin sẽ rất vô tổ chức.

or this

+2

+1. Không phải là một câu hỏi tồi. Nếu ai đó có một thư viện tốt cho việc này, vui lòng giới thiệu. Nếu không, hãy xem System.out.format – Thilo

+1

Bạn có thể xem [this] (http://stackoverflow.com/questions/15193812/how-to-print-a-table-of-arrays/15194265#15194265) cho một Ví dụ – MadProgrammer

+0

Các cược tốt nhất của bạn chủ yếu sử dụng 'System.out.printf (...)' và 'System.out.format (...)' tương đương. –

Trả lời

38

Hãy thử sử dụng System.out.format() hoặc System.out.printf() (printf chỉ cần gọi format để cả hai phương pháp đều cho kết quả tương tự).

Ở đây bạn có ví dụ đơn giản sẽ cố gắng căn chỉnh văn bản sang trái và điền vào các vị trí không sử dụng với dấu cách. Căn chỉnh chuỗi sang trái có thể đạt được với %-15s, có nghĩa là đặt trước 15 vị trí cho chuỗi (s) dữ liệu và bắt đầu ghi nó từ bên trái (-). Nếu bạn muốn thêm chữ số, hãy sử dụng hậu tố d như %-4d cho số có 4 chữ số tối đa phải được đặt ở bên trái cột.
BTW Tôi đã sử dụng %n thay vì \n để trình bày chuỗi phân tách dòng được sử dụng bởi hệ điều hành hiện tại như cho Windows, nó sẽ là \r\n.

Bạn có thể tìm thêm thông tin tại 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"); 

đầu ra

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

¡¡Câu trả lời hoàn hảo !! ¡Cảm ơn bạn rất nhiều! tôi có thể làm điều đó tôi muốn =) –

+0

Đối với các yêu cầu cố định, giải pháp này là hoàn hảo. Để có nhiều trường hợp sử dụng thực tế hơn, thư viện phù hợp hơn. Xem câu trả lời này: http://stackoverflow.com/a/35961774/363573. – Stephan

5

sử dụng System.out.printf()

Ví dụ,

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

sẽ in ra nội dung của String s, chiếm đúng 10 ký tự. Vì vậy, nếu bạn muốn có một bảng, chỉ cần đảm bảo rằng mỗi ô trong bảng được in ra cùng độ dài. Cũng lưu ý rằng printf() không in dòng mới, vì vậy bạn sẽ phải tự in nó.

0

Bạn có thể sử dụng String.Format() với phương pháp đúng Mã có thể giống như thế này tôi đoán

StringBuilder sb=new StringBuilder(); 

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

Tính đến thư viện tôi không nghĩ rằng có bất kỳ mà sẽ thực hiện công việc, tuy nhiên tôi có thể nhầm lẫn! thực sự sẽ làm nghiên cứu về nó

Cũng có một cái nhìn tại này http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

0

TUIAWT phép bạn sử dụng AWT thành phần trong một cửa sổ giao diện điều khiển. Dường như nó không hỗ trợ List hoặc Table, nhưng nó có thể cung cấp cho bạn một điểm khởi đầu.

+0

Theo văn bản này, bản cập nhật cuối cùng đến TUIAWT có vẻ là vào tháng 3 năm 2015. – Stephan

4

Bạn có thể sử dụng java-ascii-table. Xem thêm the author's site.

+3

java-ascii-table dường như bị bỏ qua. Xem câu trả lời này để thay thế: http://stackoverflow.com/a/35961774/363573 – Stephan

1

Điều này cũng hoạt động khá tốt http://sourceforge.net/projects/texttablefmt/. Apache cũng được cấp phép.

+0

texttablefmt dường như không có sẵn trên Maven. Đây là một thư viện khác có sẵn trên Maven: http://stackoverflow.com/a/35961774/363573 – Stephan

13

Thử phương án này: asciitable.

Nó cung cấp một số triển khai của bảng văn bản, ban đầu sử dụng ký tự ASCII và UTF-8 cho đường viền.

Dưới đây là một bảng mẫu:

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

Tìm phiên bản mới nhất:http://mvnrepository.com/artifact/de.vandermeer/asciitable

Xem thêm: https://stackoverflow.com/a/39806611/363573

5

Lớp học của tôi Tôi tạo đặc biệt để làm điều này là hoàn toàn động: https://github.com/MRebhan/crogamp/blob/master/src/com/github/mrebhan/crogamp/cli/TableList.java

Bạn có thể sử dụng nó như thế này:

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

Nó sẽ giống như thế này với ký tự unicode (lưu ý: sẽ trông đẹp hơn trong giao diện điều khiển từ tất cả các ký tự rộng không kém):

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

Và với các ký tự unicode tắt (bỏ qua .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] 
Các vấn đề liên quan