[java] 왼쪽에 0으로 정수를 채우려면 어떻게해야합니까?

Java int로 변환 할 때 어떻게 0 String으로 채 웠습니까?

기본적으로 정수를 9999앞에 오는 0으로 채우려 고합니다 (예 : 1 = 0001).



답변

다음 java.lang.String.format(String,Object...)과 같이 사용하십시오 .

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

길이가 5 인 제로 패딩의 경우 16 진 출력의 d경우 xas를로 변경하십시오 "%05x".

전체 서식 옵션은의 일부로 설명되어 있습니다 java.util.Formatter.


답변

다음 11과 같이 인쇄하고 싶다고 가정 해 봅시다.011

당신은 포맷을 사용할 수 있습니다 : "%03d".

여기에 이미지 설명을 입력하십시오

이 포맷터를 다음과 같이 사용할 수 있습니다.

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

또는 일부 Java 메소드는 이러한 포맷터를 직접 지원합니다.

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


답변

어떤 이유로 든 1.5 이전 Java를 사용하는 경우 Apache Commons Lang 방법을 사용해보십시오.

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


답변

이 예제를 찾았습니다 … 테스트 할 것입니다 …

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

이것을 테스트하고 :

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

두 가지 모두 내 목적으로 String.Format이 더 좋고 간결하다고 생각합니다.


답변

성능이 중요한 경우 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();       
}

공연

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

결과

자신의 기능 : 1697ms

문자열 형식 : 38134ms


답변

Google Guava 를 사용할 수 있습니다 .

메이븐 :

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

샘플 코드 :

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

노트 :

Guava매우 유용한 라이브러리, 그것은 또한 관련 기능을 많이 제공 Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, 등

참조 : 구아바


답변

이거 한번 해봐:

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