2011-07-31 25 views
89
String hello = "Hello"; 

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello); 

hello hello hello hello hello hello 

Biến hello phải lặp lại nhiều lần trong cuộc gọi đến phương thức định dạng hoặc có phiên bản viết tắt cho phép bạn chỉ định đối số một lần được áp dụng cho tất cả các mã thông báo %s?Còn nếu bạn có cùng thông số nhiều lần trong String.format thì sao?

Trả lời

189

Từ the docs:

  • Các specifiers định dạng cho chung, nhân vật, và các loại số có cú pháp sau:

    %[argument_index$][flags][width][.precision]conversion 
    

    Các tùy chọn argument_index là một số nguyên thập phân cho thấy sự vị trí của đối số trong danh sách đối số. Đối số đầu tiên được tham chiếu bởi "1$", thứ hai bởi "2$" vv

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello); 
22

Một lựa chọn khác là sử dụng lập chỉ mục tương: Từ khoá định dạng tham chiếu lập luận tương tự như sự xác định định dạng cuối cùng.

Ví dụ:

String.format("%s %<s %<s %<s", "hello") 

kết quả trong hello hello hello hello.

+0

https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dpos – Vadzim

0

Một trường hợp phổ biến để sử dụng lại đối số trong String.format là bằng dấu phân cách (ví dụ: ";" cho CSV hoặc tab cho bảng điều khiển).

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c")); 
// "a ; ; ; b" 

Đây không phải là đầu ra mong muốn. "c" không xuất hiện ở bất kỳ đâu.

Bạn cần phải sử dụng các dấu phân cách đầu tiên (với %s) và chỉ sử dụng các chỉ số tham số (%2$s) cho lần xuất hiện sau:

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c")); 
// "a ; b ; c" 

Spaces được thêm vào để có thể đọc và sửa lỗi. Khi định dạng có vẻ chính xác, bạn có thể xóa không gian trong trình chỉnh sửa văn bản:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c")); 
// "a;b;c" 
Các vấn đề liên quan