Pertanyaan Bagaimana saya bisa pad integer dengan nol di sebelah kiri?


Bagaimana Anda meninggalkan pad an int dengan nol saat mengonversi menjadi a String di java?

Pada dasarnya saya ingin padam bilangan bulat hingga 9999 dengan nol di depan (mis. 1 = 0001).


838
2018-01-23 15:21


asal


Jawaban:


Menggunakan java.lang.String.format(String,Object...) seperti ini:

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

untuk padding nol dengan panjang 5. Untuk output heksadesimal menggantikan d dengan sebuah x seperti dalam "%05x".

Opsi pemformatan lengkap didokumentasikan sebagai bagian dari java.util.Formatter.


1453
2018-01-23 15:26



Jika Anda karena alasan apa pun menggunakan pra 1.5 Java maka dapat mencoba dengan metode Apache Commons Lang

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

97
2018-01-23 15:32



Katakanlah Anda ingin mencetak 11 sebagai 011

Anda bisa menggunakan formatter: "%03d".

enter image description here

Anda dapat menggunakan formatter ini seperti ini:

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

Atau, beberapa metode java langsung mendukung formatters ini:

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

64
2018-02-20 11:41



Menemukan contoh ini ... Akan menguji ...

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

Diuji ini dan:

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

Keduanya bekerja, untuk tujuan saya, saya pikir String.Format lebih baik dan lebih ringkas.


26
2018-01-23 15:25



Jika kinerja penting dalam kasus Anda, Anda dapat melakukannya sendiri dengan lebih sedikit overhead dibandingkan dengan String.format fungsi:

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

Kinerja

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

Hasil

Fungsi sendiri: 1697ms

String.format: 38134ms


14
2017-09-03 15:05



Kamu dapat memakai Google Guava:

Maven:

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

Kode sampel:

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

catatan:

Guava adalah pustaka yang sangat berguna, juga menyediakan banyak fitur yang terkait Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, dll

Ref: GuavaJernih 


13
2018-05-03 07:42



Meskipun banyak pendekatan di atas bagus, tetapi kadang-kadang kita perlu memformat bilangan bulat serta mengapung. Kita bisa menggunakan ini, terutama ketika kita perlu memasukkan angka nol di sebelah kiri serta kanan angka desimal.

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(",",""));  
 }    
}  

2
2018-03-02 19:13



int x = 1;
System.out.format("%05d",x);

jika Anda ingin mencetak teks yang diformat langsung ke layar.


2
2017-08-24 13:29



Coba yang ini:

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

1
2018-06-25 14:26