Định dạng một số nguyên bằng định dạng chuỗi Java


129

Tôi tự hỏi nếu có thể, sử dụng phương thức String.format trong Java, để đưa ra một số nguyên đứng trước?

Ví dụ:

1 sẽ trở thành 001
2 sẽ trở thành 002
...
11 sẽ trở thành 011
12 sẽ trở thành 012
...
526 sẽ vẫn là 526
... vv

Hiện tại tôi đã thử đoạn mã sau:

String imageName = "_%3d" + "_%s";

for( int i = 0; i < 1000; i++ ){
    System.out.println( String.format( imageName, i, "foo" ) );
}

Thật không may, điều này đi trước số lượng với 3 khoảng trống. Thay vào đó, nó có thể đứng trước số có số không?


Câu trả lời:


172

Sử dụng %03dtrong định dạng định dạng cho số nguyên. Có 0nghĩa là số sẽ được điền bằng 0 nếu nó nhỏ hơn ba chữ số (trong trường hợp này).

Xem Formattertài liệu cho các sửa đổi khác.


211
String.format("%03d", 1)  // => "001"
//              │││   └── print the number one
//              ││└────── ... as a decimal integer
//              │└─────── ... minimum of 3 characters wide
//              └──────── ... pad with zeroes instead of spaces

Xem java.util.Formatterđể biết thêm thông tin.


13

Nếu bạn đang sử dụng thư viện của bên thứ ba có tên apache commons-lang, giải pháp sau đây có thể hữu ích:

Sử dụng StringUtilslớp apache commons-lang :

int i = 5;
StringUtils.leftPad(String.valueOf(i), 3, "0"); // --> "005"

Như StringUtils.leftPad()là nhanh hơnString.format()


StringUtils.leftPad là một lựa chọn tốt khác và có thể lập luận rằng nó dễ đọc hơn cộng với nó cho phép bạn đệm với các nhân vật khác. Tôi đã có một Google xung quanh nhưng tôi không thể tìm thấy bất cứ điều gì xác nhận nó nhanh hơn - bạn có thể cung cấp một số bằng chứng cho điều đó không?
Đầu tôi đau

github.com/anilbharadia/JavaPerformanceTests/blob/master/NH Chạy nó với Junit và kiểm tra thời gian
Anil Bharadia
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.