Formatieren Sie eine Ganzzahl mit dem Java-Zeichenfolgenformat

129

Ich frage mich, ob es möglich ist, mit der String.format-Methode in Java eine Ganzzahl vor Nullen anzugeben.

Beispielsweise:

1 würde 001 werden
2 würde 002 werden
...
11 würde 011 werden
12 würde 012 werden
...
526 würde bleiben wie 526
... etc.

Im Moment habe ich folgenden Code ausprobiert:

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

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

Leider geht der Zahl 3 Leerzeichen voraus. Kann man der Zahl stattdessen Nullen voranstellen?

Mein Kopf tut weh
quelle
mögliches Duplikat von Add führenden Nullen in Java
Jonathon Faust

Antworten:

172

Verwenden Sie %03dim Formatbezeichner für die Ganzzahl. Die 0bedeutet , dass die Anzahl wird mit Nullen aufgefüllt , wenn es weniger als drei (in diesem Fall) Ziffern.

FormatterWeitere Modifikatoren finden Sie in den Dokumenten.

Matte
quelle
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

Siehe java.util.Formatterfür weitere Informationen.

Maerics
quelle
13

Wenn Sie eine Drittanbieter-Bibliothek namens apache commons-lang verwenden, kann die folgende Lösung hilfreich sein:

Verwenden Sie die StringUtilsKlasse von Apache commons-lang :

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

Da StringUtils.leftPad()ist schneller alsString.format()

Anil Bharadia
quelle
StringUtils.leftPad ist eine weitere gute Wahl und könnte argumentiert werden, dass es besser lesbar ist und es Ihnen ermöglicht, mit anderen Zeichen zu füllen. Ich hatte ein Google in der Nähe, kann aber nichts finden, das bestätigt, dass es schneller ist. Können Sie dafür Beweise liefern?
Mein Kopf tut weh
github.com/anilbharadia/JavaPerformanceTests/blob/master/… Führen Sie es mit junit aus und überprüfen Sie die Zeit
Anil Bharadia