Vra

Hoe kan jy links pad 'n int met nulle wanneer die omskakeling na 'n String in Java?

Ek is basies op soek na pad uit heelgetalle tot 9999 met vooraanstaande nulle (bv 1 = 0001).

Was dit nuttig?

Oplossing

Gebruik java.lang.String.format(String,Object...) soos volg:

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

vir 'n nul-padding met 'n lengte van 5. Vir heksadesimale uitset vervang die d met 'n x as in "%05x".

Die volle opmaak opsies is gedokumenteer as deel van java.util.Formatter .

Ander wenke

As jy vir een of ander rede pre 1.5 Java gebruik dan kan probeer om met Apache Commons Lang metode

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

Kom ons sê jy wil 11 as 011 druk

Jy kan 'n formatter gebruik. "%03d"

 betree beeld beskrywing hier

Jy kan dit formatter gebruik soos volg:

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

As alternatief, 'n paar Java metodes direk ondersteun hierdie formatters:

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

Het gevind dat hierdie voorbeeld ... toets ...

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

Hierdie getoets en:

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

Beide werk, vir my doeleindes Ek dink String.Format is beter en meer bondige.

As prestasie is belangrik in jou geval jy kan dit self te doen met minder oorhoofse in vergelyking met die String.format funksie:

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

Die resultaat

Eie funksie: 1697ms

String.format: 38134ms

Jy kan gebruik Google Koejawel :

Maven:

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

Voorbeeld kode:

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

Nota:

Guava is baie nuttig biblioteek, dit bied ook baie van die funksies wat verband hou met Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, ens

Ref: GuavaExplained

Probeer hierdie een:

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

Hoewel baie van die bogenoemde benaderings is goed, maar soms moet ons heelgetalle asook dryf formaat. Ons kan dit gebruik, veral wanneer ons nodig het om pad bepaalde aantal nulle op links sowel as regs van desimale getalle.

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

As jy wil hê dat die geformateerde teks direk op die skerm te druk.

Gebruik die klas DecimalFormat, soos so:

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

afvoer: 0000811

Gaan my kode wat sal werk vir heelgetal en String.

Neem aan ons eerste nommer is 2. En ons wil nulle voeg by dat so die lengte van finale string sal wees 4. Vir wat jy kan gebruik volgende kode

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

Jy moet 'n Formatter gebruik, volgende kode gebruike 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));
  

Uitgawe: 0001

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

Die enigste probleem met hierdie benadering is dat dit laat jou op jou denke hoed om uit te vind hoe dit werk.

Geen pakkette wat nodig is:

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

Dit wil boekie die string tot drie karakters, en dit is maklik om 'n deel meer by te voeg vir vier of vyf. Ek weet dit is nie die ideale oplossing in enige manier (veral as jy 'n groot opgestopte string), maar ek hou daarvan.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top