Java Dize Biçimini kullanarak bir Tamsayı biçimlendirme


130

Java'da String.format yöntemini kullanarak sıfırlardan önce bir tamsayı vermenin mümkün olup olmadığını merak ediyorum.

Örneğin:

1 olur 001
2 olur 002
...
11 olur 011
12 olur 012
...
526 526 kalır
... vb.

Şu anda aşağıdaki kodu denedim:

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

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

Maalesef, bu sayı 3 boşlukla önde geliyor. Bunun yerine sayının önüne sıfır koymak mümkün mü?


Yanıtlar:


173

%03dTamsayı için biçim tanımlayıcısında kullanın . Bu 0, sayı üç basamaktan (bu durumda) azsa sıfır doldurulacağı anlamına gelir.

FormatterDiğer değiştiriciler için dokümanlara bakın .


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

Daha java.util.Formatterfazla bilgi için bakın .


13

Apache commons-lang adlı üçüncü taraf bir kitaplık kullanıyorsanız, aşağıdaki çözüm yararlı olabilir:

StringUtilsApache commons-lang sınıfını kullanın :

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

Daha StringUtils.leftPad()hızlı olduğu gibiString.format()


StringUtils.leftPad başka bir iyi seçimdir ve daha okunabilir olduğu ve diğer karakterlerle doldurmanıza izin verdiği söylenebilir. Etrafımda bir Google var ama daha hızlı olduğunu doğrulayan hiçbir şey bulamıyorum - bunun için bazı kanıtlar sağlayabilir misiniz?
Başım ağrıyor

github.com/anilbharadia/JavaPerformanceTests/blob/master/… junit ile çalıştırın ve saati kontrol edin
Anil Bharadia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.