1242 Stimmen

Wie kann ich eine ganze Zahl mit Nullen auf der linken Seite auffüllen?

Wie kann man ein linkes Pad int mit Nullen bei der Umwandlung in eine String in Java?

Ich bin im Grunde suchen, um aufzufüllen Ganzzahlen bis zu 9999 mit führenden Nullen (z. B. 1 = 0001 ).

26voto

Morgan Koh Punkte 1796

So können Sie Ihre Zeichenkette formatieren, ohne DecimalFormat .

String.format("%02d", 9)

09

String.format("%03d", 19)

019

String.format("%04d", 119)

0119

23voto

das Keks Punkte 3283

Wenn die Leistung in Ihrem Fall wichtig ist, können Sie dies mit weniger Aufwand selbst tun als mit dem String.format Funktion:

/**
 * @param in The integer value
 * @param fill The number of digits to fill
 * @return The given value left padded with the given number of digits
 */
public static String lPadZero(int in, int fill){

    boolean negative = false;
    int value, len = 0;

    if(in >= 0){
        value = in;
    } else {
        negative = true;
        value = - in;
        in = - in;
        len ++;
    }

    if(value == 0){
        len = 1;
    } else{         
        for(; value != 0; len ++){
            value /= 10;
        }
    }

    StringBuilder sb = new StringBuilder();

    if(negative){
        sb.append('-');
    }

    for(int i = fill; i > len; i--){
        sb.append('0');
    }

    sb.append(in);

    return sb.toString();       
}

Leistung

public static void main(String[] args) {
    Random rdm;
    long start; 

    // Using own function
    rdm = new Random(0);
    start = System.nanoTime();

    for(int i = 10000000; i != 0; i--){
        lPadZero(rdm.nextInt(20000) - 10000, 4);
    }
    System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms");

    // Using String.format
    rdm = new Random(0);        
    start = System.nanoTime();

    for(int i = 10000000; i != 0; i--){
        String.format("%04d", rdm.nextInt(20000) - 10000);
    }
    System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}

Ergebnis

Eigene Funktion: 1697ms

String.format: 38134ms

18voto

Tho Punkte 19990

Sie können verwenden Google Guava :

Maven:

<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>

Beispiel-Code:

String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"

Nota:

Guava ist eine sehr nützliche Bibliothek, die auch viele Funktionen bietet, die sich auf Collections , Caches , Functional idioms , Concurrency , Strings , Primitives , Ranges , IO , Hashing , EventBus usw.

Ref: GuavaErklärt

3voto

Deepak Punkte 57

Obwohl viele der oben genannten Ansätze gut sind, müssen wir manchmal sowohl Ganzzahlen als auch Fließkommazahlen formatieren. Wir können dies verwenden, insbesondere wenn wir eine bestimmte Anzahl von Nullen sowohl links als auch rechts von Dezimalzahlen auffüllen müssen.

import java.text.NumberFormat;  
public class NumberFormatMain {  

public static void main(String[] args) {  
    int intNumber = 25;  
    float floatNumber = 25.546f;  
    NumberFormat format=NumberFormat.getInstance();  
    format.setMaximumIntegerDigits(6);  
    format.setMaximumFractionDigits(6);  
    format.setMinimumFractionDigits(6);  
    format.setMinimumIntegerDigits(6);  

    System.out.println("Formatted Integer : "+format.format(intNumber).replace(",",""));  
    System.out.println("Formatted Float   : "+format.format(floatNumber).replace(",",""));  
 }    
}

3voto

Shashi Punkte 746
int x = 1;
System.out.format("%05d",x);

wenn Sie den formatierten Text direkt auf dem Bildschirm ausdrucken möchten.

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