2013-04-12 48 views
13

Tôi cần hiển thị danh sách các mục có giá của chúng từ một mảng và muốn căn chỉnh giá. Tôi gần như có nó làm việc nhưng cần cải tiến. Dưới đây là mã và đầu ra. Bất kỳ ý tưởng làm thế nào để làm cho tất cả các giá liên kết? Cho đến nay một số công việc nhưng một số thì không. Cảm ơn trước.Căn chỉnh đầu ra printf trong Java

//for loop 
System.out.printf("%d. %s \t\t $%.2f\n", 
       i + 1, BOOK_TYPE[i], COST[i]); 

đầu ra:

1. Newspaper   $1.00 
2. Paper Back  $7.50 
3. Hardcover book  $10.00 
4. Electronic book  $2.00 
5. Magazine   $3.00 
+0

http://docs.oracle.com/javase/7/docs/api/java /util/Formatter.html cho thấy cách bạn có thể căn chỉnh đầu ra của mình. Ví dụ: formatter.format (Locale.FRANCE, "e =% + 10.4f", Math.E); trong đó 10 là số "dấu cách" giữa dấu bằng và số được in và 4 là số chữ số thập phân. –

Trả lời

16

Bạn có thể thử ví dụ bên dưới. Do sử dụng '-' trước độ rộng để đảm bảo thụt lề trái. Theo mặc định, chúng sẽ được thụt lề phải; có thể không phù hợp với mục đích của bạn.

System.out.printf("%2d. %-20s $%.2f%n", i + 1, BOOK_TYPE[i], COST[i]); 

Format Chuỗi Cú pháp: http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

Formatting Numeric In Output: https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

PS: Đây có thể đi như một bình luận cho câu trả lời DWB, nhưng tôi vẫn không có quyền bình luận và do đó trả lời nó.

3

Một giải pháp đơn giản mà lò xo để tâm là phải có một khối String của không gian:

String indent = "     "; // 20 spaces. 

Khi in ra một chuỗi, tính thụt lề thực tế và thêm nó vào cuối:

String output = "Newspaper"; 
output += indent.substring(0, indent.length - output.length); 

Điều này sẽ dàn xếp số lượng khoảng trống cho chuỗi và đặt tất cả dấu cách vào cùng một cột.

+0

Xem các câu trả lời như thế này khiến tôi muốn 'Chuỗi' của Java có' padLeft', 'padRight', v.v. giống như các thư viện chuẩn ngôn ngữ lập trình khác ... – Patashu

+1

Java không có StringUtils.leftPad() và StringUtils.rightPad(). đây là một phần của Apache Commons Lang. – DwB

6

Đặc điểm định dạng cho printf và các phương thức giống như printf có tham số chiều rộng tùy chọn.

System.out.printf("%10d. %25s $%25.2f\n", 
        i + 1, BOOK_TYPE[i], COST[i]); 

Điều chỉnh chiều rộng thành giá trị mong muốn.

+8

Trước hết, đừng gọi ai đó lười biếng mà không biết gì về người đó. Thứ hai, tôi là một người mới bắt đầu Java nhưng tôi đã đọc về printf và tôi biết% 10d sẽ in 10 dấu cách trước biến. Bây giờ ông biết-nó-tất cả-và-không-lười biếng, mã của bạn là hư không gần những gì tôi cần. Nếu bạn đọc câu hỏi của tôi, tôi cần phải căn trái, ngoại trừ khoảng trống sau biến thứ hai cần thay đổi (không phải hằng số) để biến thứ ba cũng được căn chỉnh.Dù sao cũng cảm ơn. Ngày tốt. – user1781482

+1

nếu bạn đã đọc tài liệu printf thì bạn sẽ biết rằng% 10d chỉ định chiều rộng trường là 10 và% 010d chỉ định trường đệm trái bằng 0 với chiều rộng 10. xem xét đọc tài liệu. – DwB

+1

đọc tài liệu sẽ hiển thị cho bạn rằng - dưới dạng cờ sẽ để lại cho trường. ex% -10d – DwB

1

Đây là giải pháp tiềm năng sẽ đặt chiều rộng của cột bookType (tức là định dạng của giá trị bookTypes) dựa trên giá trị bookTypes dài nhất.

public class Test { 
    public static void main(String[] args) { 
     String[] bookTypes = { "Newspaper", "Paper Back", "Hardcover book", "Electronic book", "Magazine" }; 
     double[] costs = { 1.0, 7.5, 10.0, 2.0, 3.0 }; 

     // Find length of longest bookTypes value. 
     int maxLengthItem = 0; 
     boolean firstValue = true; 
     for (String bookType : bookTypes) { 
      maxLengthItem = (firstValue) ? bookType.length() : Math.max(maxLengthItem, bookType.length()); 
      firstValue = false; 
     } 

     // Display rows of data 
     for (int i = 0; i < bookTypes.length; i++) { 
      // Use %6.2 instead of %.2 so that decimals line up, assuming max 
      // book cost of $999.99. Change 6 to a different number if max cost 
      // is different 
      String format = "%d. %-" + Integer.toString(maxLengthItem) + "s \t\t $%9.2f\n"; 
      System.out.printf(format, i + 1, bookTypes[i], costs[i]); 
     } 
    } 
} 
0

Bạn có thể tham khảo blog này để in định dạng văn bản màu trên giao diện điều khiển

https://javaforqa.wordpress.com/java-print-coloured-table-on-console/

public class ColourConsoleDemo { 
/** 
* 
* @param args 
* 
* "\033[0m BLACK" will colour the whole line 
* 
* "\033[37m WHITE\033[0m" will colour only WHITE. 
* For colour while Opening --> "\033[37m" and closing --> "\033[0m" 
* 
* 
*/ 
public static void main(String[] args) { 
// TODO code application logic here 
System.out.println("\033[0m BLACK"); 
System.out.println("\033[31m RED"); 
System.out.println("\033[32m GREEN"); 
System.out.println("\033[33m YELLOW"); 
System.out.println("\033[34m BLUE"); 
System.out.println("\033[35m MAGENTA"); 
System.out.println("\033[36m CYAN"); 
System.out.println("\033[37m WHITE\033[0m"); 

//printing the results 
String leftAlignFormat = "| %-20s | %-7d | %-7d | %-7d |%n"; 

System.out.format("|---------Test Cases with Steps Summary -------------|%n"); 
System.out.format("+----------------------+---------+---------+---------+%n"); 
System.out.format("| Test Cases   |Passed |Failed |Skipped |%n"); 
System.out.format("+----------------------+---------+---------+---------+%n"); 

String formattedMessage = "TEST_01".trim(); 

leftAlignFormat = "| %-20s | %-7d | %-7d | %-7d |%n"; 
System.out.print("\033[31m"); // Open print red 
System.out.printf(leftAlignFormat, formattedMessage, 2, 1, 0); 
System.out.print("\033[0m"); // Close print red 
System.out.format("+----------------------+---------+---------+---------+%n"); 
} 
Các vấn đề liên quan