Memformat Integer menggunakan Java String Format

129

Saya bertanya-tanya apakah mungkin, menggunakan metode String.format di Jawa, untuk memberikan bilangan bulat nol sebelumnya?

Sebagai contoh:

1 akan menjadi 001
2 akan menjadi 002
...
11 akan menjadi 011
12 akan menjadi 012
...
526 akan tetap sebagai 526
... dll

Saat ini saya sudah mencoba kode berikut:

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

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

Sayangnya, ini mendahului angka dengan 3 ruang kosong. Apakah mungkin untuk mendahului angka dengan nol saja?

Kepala saya sakit
sumber
kemungkinan duplikat Tambahkan nol terkemuka di Jawa
Jonathon Faust

Jawaban:

172

Gunakan %03ddalam specifier format untuk integer. The 0berarti bahwa nomor akan menjadi nol-penuh jika kurang dari tiga (dalam kasus ini) digit.

Lihat Formatterdokumen untuk pengubah lainnya.

Tikar
sumber
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

Lihat java.util.Formatteruntuk informasi lebih lanjut.

maerics
sumber
13

Jika Anda menggunakan perpustakaan pihak ketiga yang disebut apache commons-lang, solusi berikut ini bisa berguna:

Gunakan StringUtilskelas apache commons-lang :

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

Seperti StringUtils.leftPad()lebih cepat dariString.format()

Anil Bharadia
sumber
StringUtils.leftPad adalah pilihan lain yang bagus dan dapat diperdebatkan bahwa itu lebih mudah dibaca dan memungkinkan Anda untuk menggunakan karakter lain. Saya sudah memiliki Google di sekitar, tetapi saya tidak dapat menemukan apa pun yang menegaskan lebih cepat - dapatkah Anda memberikan beberapa bukti untuk itu?
Kepalaku Sakit
github.com/anilbharadia/JavaPerformanceTests/blob/master/... Jalankan dengan junit dan periksa waktu
Anil Bharadia