Domanda

Come hai lasciato pad un int con zeri durante la conversione in String in java?

Fondamentalmente sto cercando di riempire gli interi fino a 9999 con zeri iniziali (ad es. 1 = 0001 ).

È stato utile?

Soluzione

Usa java.lang.String.format (String, Object ...) in questo modo:

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

per zero-padding con una lunghezza di 5. Per output esadecimale sostituire d con un x come in "% 05x " .

Le opzioni di formattazione complete sono documentate come parte di < code> java.util.Formatter .

Altri suggerimenti

Se per qualsiasi motivo usi pre 1.5 Java allora puoi provare con il metodo Apache Commons Lang

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

Supponiamo che tu voglia stampare 11 come 011

Puoi utilizzare un formattatore : "% 03d " .

 inserisci qui la descrizione dell'immagine

Puoi usare questo formattatore in questo modo:

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

In alternativa, alcuni metodi java supportano direttamente questi formattatori:

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

Trovato questo esempio ... Testerà ...

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));
    }
}

Testato questo e:

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

Entrambi funzionano, per i miei scopi penso che String.Format sia migliore e più conciso.

Se le prestazioni sono importanti nel tuo caso, potresti farlo da solo con un sovraccarico minore rispetto alla funzione String.format :

/**
 * @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");
}

Risultato

Funzione propria: 1697ms

String.format: 38134ms

Puoi utilizzare Google Guava :

Maven:

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

Codice di esempio:

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

Nota:

Guava è una libreria molto utile, offre anche molte funzionalità relative a Collezioni , Caches , Idiomi funzionali , Concurrency , Strings , Primitives , Ranges , IO , Hashing , EventBus , ecc.

Rif: GuavaExplained

Prova questo:

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

Sebbene molti degli approcci di cui sopra siano buoni, ma a volte abbiamo bisogno di formattare numeri interi e float. Possiamo usarlo, in particolare quando abbiamo bisogno di riempire un determinato numero di zeri sia a sinistra che a destra dei numeri decimali.

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

se si desidera stampare il testo formattato direttamente sullo schermo.

Usa la classe DecimalFormat, in questo modo:

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

USCITA: 0000811

Controlla il mio codice che funzionerà con numeri interi e String.

Supponiamo che il nostro primo numero sia 2. E vogliamo aggiungere degli zeri a quello, quindi la lunghezza della stringa finale sarà 4. Per questo puoi usare il seguente codice

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

Devi usare un Formatter, il codice seguente usa NumberFormat

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

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

Output: 0001

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

L'unico problema con questo approccio è che ti fa indossare il cappello pensante per capire come funziona.

Nessun pacchetto necessario:

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

Questo riempirà la stringa di tre caratteri ed è facile aggiungere una parte in più per quattro o cinque. So che questa non è la soluzione perfetta in alcun modo (soprattutto se vuoi una grande stringa imbottita), ma mi piace.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top