2012-04-03 40 views
5

Nếu chúng tôi làm System.out.printf("%10s", "1"); theo mặc định, các ký tự khoảng trắng sẽ được thêm vào để điền vào 10, phải không? Có cách nào để thay đổi điều này?Thay đổi ký tự đệm mặc định trong printf Java?

Tôi biết, bạn có thể thêm 0, bằng cách chỉ định 0 trước s, nhưng không printf hỗ trợ bất kỳ điều gì khác?

+0

Padding với 0 chỉ được hỗ trợ cho các loại số. Nó sẽ không làm việc với 's', nhưng nó sẽ, ví dụ, với' d': 'System.out.printf ("% 010d ", 1);' – Jesper

Trả lời

9

Nope . Không gian được mã hóa cứng. Dưới đây là đoạn java.util.Formatter nguồn thậm chí:

private String justify(String s) { 
    if (width == -1) 
    return s; 
    StringBuilder sb = new StringBuilder(); 
    boolean pad = f.contains(Flags.LEFT_JUSTIFY); 
    int sp = width - s.length(); 
    if (!pad) 
    for (int i = 0; i < sp; i++) sb.append(' '); 
    sb.append(s); 
    if (pad) 
    for (int i = 0; i < sp; i++) sb.append(' '); 
    return sb.toString(); 
} 

Nếu bạn đang tìm kiếm để có được một lớp đệm khác nhau mà bạn có thể làm một bài định dạng thay thế hoặc một cái gì đó tương tự:

System.out.print(String.format("%10s", "1").replace(' ', '#')); 
0

Bạn có thể sử dụng bất kỳ số lượng, như:

System.out.printf("%77s", "1"); 


Bạn có thể làm định dạng hơn bằng cách sử dụng phương pháp định dạng, như:

System.out.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d"); 


đầu ra: dcba

+0

Điều đó sẽ in 76 dấu cách và một chữ số 1, đó là không phải những gì user1064918 yêu cầu. – Jesper

+0

Có, @ Jesper, tôi không có nghĩa là số lượng không gian. Tôi có nghĩa là "nhân vật" để lấp đầy không gian trống nếu chuỗi ngắn hơn độ dài được chỉ định trong định dạng. – user113454

+0

vâng, tôi hiểu sai! –

Các vấn đề liên quan