Sử dụng lại một tham số trong String.format?


136
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 có cần được lặp lại nhiều lần trong lệnh gọi phương thức định dạng hay có phiên bản tốc ký nào cho phép bạn chỉ định đối số một lần được áp dụng cho tất cả các %smã thông báo không?

Câu trả lời:


261

Từ các tài liệu :

  • Các chỉ định định dạng cho các loại chung, ký tự và số có cú pháp sau:

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

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

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


12

Bạn cần lập chỉ mục người dùng %[argument_index$]như sau:

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

Kết quả : hello hello hello hello hello hello


4

Một trường hợp phổ biến để sử dụng lại đối số trong String.formatlà bằng dấu phân cách (ví dụ: ";"đối với 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 cứ đâu.

Bạn cần sử dụng dấu phân cách trước (với %s) và chỉ sử dụng chỉ số đối số ( %2$s) cho các 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"

Không gian được thêm vào để dễ đọc và gỡ lỗi. Khi định dạng có vẻ đúng, có thể xóa khoảng trắng trong trình soạn thảo văn bản:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.