Frage

Wie links Sie Pad eine int mit Nullen, wenn sie einen String in Java konvertieren?

Ich suche im Grunde zu polstern ganzen Zahlen nach oben mit führenden Nullen 9999 (z 1 = 0001).

War es hilfreich?

Lösung

Mit java.lang.String.format(String,Object...) wie folgt aus:

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

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

Die vollständigen Formatierungsoptionen werden im Rahmen der java.util.Formatter .

Andere Tipps

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

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

Angenommen, Sie 11 als 011 drucken möchten

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

 image description hier

Sie können diese Formatierer wie folgt verwenden:

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

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

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

In diesem Beispiel gefunden ... 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 diese und:

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

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

Wenn die Leistung wichtig, in Ihrem Fall ist man es selbst mit weniger Overhead im Vergleich zu der String.format Funktion tun konnte:

/**
 * @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: 38134ms

Sie können mit 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 sehr nützlich, Bibliothek, sondern auch viele Funktionen bietet, die Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, etc

EventBus bezogen

Ref: GuavaExplained

Versuchen Sie dieses:

import java.text.DecimalFormat; 

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

Obwohl viele der oben genannten Ansätze sind gut, aber manchmal müssen wir ganze Zahlen als auch als Schwimmer zu formatieren. Wir können dies nutzen, vor allem, wenn wir Pad bestimmte Anzahl von Nullen müssen auf sowie rechts von Dezimalzahlen links.

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(",",""));  
 }    
}  
int x = 1;
System.out.format("%05d",x);

Wenn Sie den formatierten Text direkt auf den Bildschirm drucken.

Verwenden Sie die Klasse DecimalFormat, etwa so:

NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811)); 

OUTPUT: 0000811

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

Nehmen wir unsere erste Zahl ist 2. Und wir wollen, dass Nullen hinzufügen, damit die die Länge der letzte Saite 4 das sein wird für Sie 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);

Sie benötigen einen Formatter zu verwenden, folgenden Code verwendet Number

    int inputNo = 1;
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumIntegerDigits(4);
    nf.setMinimumIntegerDigits(4);
    nf.setGroupingUsed(false);

    System.out.println("Formatted Integer : " + nf.format(inputNo));
  

Ausgabe: 0001

public static String zeroPad(long number, int width) {
   long wrapAt = (long)Math.pow(10, width);
   return String.valueOf(number % wrapAt + wrapAt).substring(1);
}

Das einzige Problem bei diesem Ansatz ist, dass es Sie, um herauszufinden, setzen auf Ihrem Denken Hut macht, wie es funktioniert.

Keine Pakete benötigt:

String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;

die Zeichenfolge zu drei Zeichen Dies wird Pad, und es ist einfach ein Teil mehr für vier oder fünf hinzuzufügen. Ich weiß, dass dies in keiner Weise die perfekte Lösung ist (vor allem, wenn Sie eine große gepolsterte Saite verzichten wollen), aber Ich mag es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top