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?


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.


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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.