584 Stimmen

Führende Nullen zu einer Zahl in Java hinzufügen?

Gibt es eine bessere Möglichkeit, dieses Ergebnis zu erzielen? Diese Funktion schlägt fehl, wenn num mehr Stellen als Ziffern hat, und ich habe das Gefühl, dass sie irgendwo in der Bibliothek stehen sollte (wie Integer.toString(x,"%3d") oder so)

static String intToString(int num, int digits) {
    StringBuffer s = new StringBuffer(digits);
    int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1; 
    for (int i = 0; i < zeroes; i++) {
        s.append(0);
    }
    return s.append(num).toString();
}

1517voto

begray Punkte 15111

String.format ( https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax )

In Ihrem Fall wird das so sein:

String formatted = String.format("%03d", num);
  • 0 - zum Auffüllen mit Nullen
  • 3 - um die Breite auf 3 zu setzen

94voto

Jason Coco Punkte 77369

Seit Java 1.5 können Sie die String.format Methode. Zum Beispiel, um die gleiche Sache wie Ihr Beispiel zu tun:

String format = String.format("%0%d", digits);
String result = String.format(format, num);
return result;

In diesem Fall erstellen Sie die Formatzeichenfolge unter Verwendung der in Ziffern angegebenen Breite und wenden sie dann direkt auf die Zahl an. Das Format für dieses Beispiel wird wie folgt umgewandelt:

%% --> %
0  --> 0
%d --> <value of digits>
d  --> d

Wenn also Ziffern gleich 5 ist, wird die Formatzeichenfolge %05d die eine ganze Zahl mit einer Breite von 5 und führenden Nullen angibt. Siehe die Java-Dokumente für String.format für weitere Informationen über die Konvertierungsspezifizierer.

39voto

Elijah Punkte 12990

Eine weitere Möglichkeit ist die Verwendung von DecimalFormat um Ihre numerische Zeichenfolge zu formatieren. Hier ist ein anderer Weg, um den Job zu tun, ohne String.format zu verwenden, wenn Sie in der Welt vor 1.5 stecken:

static String intToString(int num, int digits) {
    assert digits > 0 : "Invalid number of digits";

    // create variable length array of zeros
    char[] zeros = new char[digits];
    Arrays.fill(zeros, '0');
    // format number as String
    DecimalFormat df = new DecimalFormat(String.valueOf(zeros));

    return df.format(num);
}

8voto

Torin Rudeen Punkte 105

Wie wäre es mit einfach:

public static String intToString(int num, int digits) {
    String output = Integer.toString(num);
    while (output.length() < digits) output = "0" + output;
    return output;
}

-12voto

Falls Ihre jdk-Version kleiner als 1.5 ist, kann die folgende Option verwendet werden.

    int iTest = 2;
    StringBuffer sTest = new StringBuffer("000000"); //if the string size is 6
    sTest.append(String.valueOf(iTest));
    System.out.println(sTest.substring(sTest.length()-6, sTest.length()));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X