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


Wie hast du Pad verlassen? int mit Nullen beim Konvertieren in a String in Java?

Ich versuche im Grunde, ganze Zahlen aufzustellen 9999 mit führenden Nullen (z.B. 1 = 0001).


838
2018-01-23 15:21


Ursprung


Antworten:


Benutzen java.lang.String.format(String,Object...) so was:

String.format("%05d", yournumber);

für Zero-Padding mit einer Länge von 5. Für hexadezimale Ausgabe ersetzen Sie die d mit einem x wie in "%05x".

Die vollständigen Formatierungsoptionen sind als Teil von dokumentiert java.util.Formatter.


1453
2018-01-23 15:26



Wenn Sie aus irgendeinem Grund vor 1.5 Java verwenden, dann versuchen Sie vielleicht mit Apache Commons Lang Methode

org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')

97
2018-01-23 15:32



Angenommen, Sie möchten drucken 11 wie 011

Sie könnten einen Formatierer verwenden: "%03d".

enter image description here

Sie können diesen Formatierer wie folgt verwenden:

int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);

Alternativ unterstützen einige Java-Methoden diese Formatierer direkt:

System.out.printf("%03d", a);

64
2018-02-20 11:41



Dieses Beispiel gefunden ... Wird testen ...

import java.text.DecimalFormat;
class TestingAndQualityAssuranceDepartment
{
    public static void main(String [] args)
    {
        int x=1;
        DecimalFormat df = new DecimalFormat("00");
        System.out.println(df.format(x));
    }
}

Getestet und:

String.format("%05d",number);

Beide arbeiten, für meine Zwecke finde ich String.Format besser und prägnanter.


26
2018-01-23 15:25



Wenn Leistung in Ihrem Fall wichtig ist, können Sie es mit weniger Overhead im Vergleich zu dem selbst tun 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();       
}

Performance

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: 38134 ms


14
2017-09-03 15:05



Sie können verwenden Google Guava:

Maven:

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

Beispielcode:

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

Hinweis:

Guava ist eine sehr nützliche Bibliothek, es bietet auch viele Funktionen, die damit zusammenhängen Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, etc

Ref: GuavaErklärt 


13
2018-05-03 07:42



Obwohl viele der oben genannten Ansätze gut sind, müssen wir manchmal auch Integer und Floats formatieren. Wir können dies verwenden, insbesondere wenn wir eine bestimmte Anzahl von Nullen sowohl auf der linken als auch auf der rechten Seite der 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(",",""));  
 }    
}  

2
2018-03-02 19:13



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

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


2
2017-08-24 13:29



Probier diese:

DecimalFormat df = new DecimalFormat("0000");
String c = df.format(9);   // 0009
String a = df.format(99);  // 0099
String b = df.format(999); // 0999

1
2018-06-25 14:26



Überprüfen Sie meinen Code, der für Integer und String funktioniert.

Angenommen, unsere erste Zahl ist 2. Und wir wollen Nullen hinzufügen, so dass die Länge der letzten Zeichenkette 4 ist. Dafür können Sie den folgenden Code verwenden

    int number=2;
    int requiredLengthAfterPadding=4;
    String resultString=Integer.toString(number);
    int inputStringLengh=resultString.length();
    int diff=requiredLengthAfterPadding-inputStringLengh;
    if(inputStringLengh<requiredLengthAfterPadding)
    {
        resultString=new String(new char[diff]).replace("\0", "0")+number;
    }        
    System.out.println(resultString);

0
2017-07-24 10:29