Come posso tamponare un intero con zeri a sinistra?

Come è stato lasciato un int con zero durante la conversione in una String in java?

Sto cercando fondamentalmente di inserire numeri interi fino a 9999 con zero iniziali (ad es. 1 = 0001 ).

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

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

per riempimento zero con una lunghezza di 5. Per l’output esadecimale, sostituire il d con una x come in "%05x" .

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

Se per qualsiasi motivo utilizzi pre 1.5 Java, puoi provare con il metodo Apache Commons Lang

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

Diciamo che vuoi stampare 11 come 011

Potresti usare un formattatore : "%03d" .

inserisci la descrizione dell'immagine qui

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 … Verificherà …

 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 credo che String.Format sia migliore e più succinta.

Se le prestazioni sono importanti nel tuo caso, puoi farlo da te con meno overhead 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(); } 

Prestazione

 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

Proprio funzione: 1697 ms

String.format: 38134ms

Puoi utilizzare Google Guava :

Maven:

  guava com.google.guava 14.0.1  

Codice d’esempio:

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

Nota:

Guava è una libreria molto utile, fornisce anche molte funzionalità relative a Collections , Caches , Functional idioms , Concurrency , Strings , Primitives , Ranges , IO , Hashing , EventBus , ecc.

Rif: GuavaExplained

Sebbene molti degli approcci di cui sopra sono buoni, ma a volte abbiamo bisogno di formattare interi e float. Possiamo usarlo, in particolare quando abbiamo bisogno di applicare un numero particolare di zeri a sinistra e a destra di 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.

Prova questo:

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

Controlla il mio codice che funzionerà per intero e String.

Supponiamo che il nostro primo numero sia 2. E vogliamo aggiungere degli zeri in modo che la lunghezza della stringa finale sia 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 

È necessario utilizzare un formattatore, il codice seguente utilizza 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)); 

Uscita: 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 tuo cappello pensante per capire come funziona.

Nessun pacchetto richiesto:

 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 si desidera una grande stringa imbottita), ma mi piace.