web-dev-qa-db-fra.com

Comment puis-je remplir un entier avec des zéros à gauche?

Comment avez-vous laissé un pavé int avec des zéros lors de la conversion en String en java?

Je cherche essentiellement à compléter des entiers allant jusqu'à 9999 avec des zéros non significatifs (par exemple, 1 = 0001).

944
Omar Kooheji

Utilisez Java.lang.String.format(String,Object...) comme ceci:

_String.format("%05d", yournumber);
_

pour un remplissage à zéro d'une longueur de 5. Pour une sortie hexadécimale, remplacez d par un x comme dans _"%05x"_.

Les options de formatage complètes sont documentées dans le cadre de Java.util.Formatter .

1606
Yoni Roit

Si, pour une raison quelconque, vous utilisez une version antérieure à 1.5 Java, vous pouvez utiliser la méthode Apache Commons Lang.

org.Apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
108
Boris Pavlović

Supposons que vous souhaitiez imprimer 11 comme 011

Vous pouvez utiliser un formateur : "%03d".

enter image description here

Vous pouvez utiliser ce formateur comme ceci:

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

Certaines méthodes Java prennent également en charge directement ces formateurs:

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

Trouvé cet exemple ... va 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));
    }
}

Testé cela et:

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

Les deux fonctionnent, je pense que String.Format est meilleur et plus succinct.

27
Omar Kooheji

Si les performances sont importantes dans votre cas, vous pouvez le faire vous-même avec moins de temps système par rapport à la fonction 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");
}

Résultat

fonction propre: 1697ms

String.format: 38134ms

18
das Keks

Vous pouvez utiliser Google Guava :

Maven:

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

Exemple de code:

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

Remarque:

Guava est une bibliothèque très utile, elle fournit également de nombreuses fonctionnalités relatives à Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, etc.

Réf: GuavaExplained

15
Tho

Essaye celui-là:

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
8
Brijesh Patel

Bien que beaucoup des approches ci-dessus soient bonnes, nous avons parfois besoin de formater des entiers et des flottants. Nous pouvons l’utiliser, en particulier lorsque nous avons besoin d’indiquer un nombre particulier de zéros à gauche et à droite de nombres décimaux.

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

si vous souhaitez imprimer le texte formaté directement sur l'écran.

2
Shashi

tilisez la classe DecimalFormat, comme suit:

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

OUTPUT: 0000811

1
Shomu

Vous devez utiliser un formateur, le code suivant utilise 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));

Sortie: 0001

0
Jobin Joseph

Vérifiez mon code qui fonctionnera pour integer et String.

Supposons que notre premier nombre est 2. Et nous voulons ajouter des zéros à celui-ci afin que la longueur de la chaîne finale soit 4. Pour cela, vous pouvez utiliser le code suivant

    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
Fathah Rehman P