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?


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.


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.


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()


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,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.