Sformatuj liczbę całkowitą przy użyciu formatu Java String

129

Zastanawiam się, czy jest możliwe, używając metody String.format w Javie, aby podać liczbę całkowitą poprzedzającą zera?

Na przykład:

1 stanie się 001
2 stanie się 002
...
11 stanie się 011
12 stanie się 012
...
526 pozostanie jako 526
... itd.

W tej chwili wypróbowałem następujący kod:

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

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

Niestety poprzedza liczbę z 3 pustymi spacjami. Czy można zamiast tego poprzedzić liczbę zerami?

Boli mnie głowa
źródło
możliwy duplikat dodawania wiodących zer w Javie
Jonathon Faust

Odpowiedzi:

172

Użyj %03dw specyfikatorze formatu dla liczby całkowitej. Te 0środki, że liczba będzie wynosić zero napełniony, jeśli jest mniej niż trzy (w tym przypadku) cyfr.

Zobacz Formatterdokumentację dla innych modyfikatorów.

Mata
źródło
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

Zobacz, java.util.Formatteraby uzyskać więcej informacji.

maerics
źródło
13

Jeśli korzystasz z biblioteki innej firmy o nazwie apache commons-lang, przydatne może być następujące rozwiązanie:

Użyj StringUtilsklasy apache commons-lang :

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

Jak StringUtils.leftPad()jest szybszy niżString.format()

Anil Bharadia
źródło
StringUtils.leftPad to kolejny dobry wybór i można argumentować, że jest bardziej czytelny, a ponadto pozwala na wypełnienie innymi znakami. Miałem w pobliżu Google, ale nie mogę znaleźć niczego, co potwierdziłoby, że jest szybsze - czy możesz przedstawić na to jakieś dowody?
Boli mnie głowa,
github.com/anilbharadia/JavaPerformanceTests/blob/master/… Uruchom go z junit i sprawdź czas
Anil Bharadia.