문제

패드 an을 어떻게 남겼습니까? int a로 변환 할 때 0과 함께 String 자바에서?

나는 기본적으로 정수를 끄는 것을 찾고 있습니다 9999 주요 0 (예 : 1 = 0001).

도움이 되었습니까?

해결책

사용 java.lang.String.format(String,Object...) 이와 같이:

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

길이가 5 인 제로 패딩의 경우 16 진수 출력의 경우 교체 d 와 함께 x 에서와 같이 "%05x".

전체 서식 옵션은의 일부로 문서화됩니다 java.util.Formatter.

다른 팁

어떤 이유로 든 1.5 사전 Java를 사용하는 경우 Apache Commons Lang Method를 사용해 볼 수 있습니다.

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

인쇄하고 싶다고 가정 해 봅시다 11 ~처럼 011

포피터를 사용할 수 있습니다: "%03d".

enter image description here

다음과 같이이 Formatter를 사용할 수 있습니다.

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

또는 일부 Java 방법은 이러한 포맷터를 직접 지원합니다.

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

이 예를 찾았습니다 ... 테스트 ...

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

String.format : 38134ms

당신이 사용할 수있는 Google Guava:

Maven :

<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, 등

ref : guavaexplained

이거 한번 해봐:

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

위의 많은 접근 방식은 좋지만 때로는 수레뿐만 아니라 정수를 포맷해야합니다. 우리는 이것을 사용할 수 있습니다. 특히 왼쪽에 특정 수의 제로를 채우고 소수점 번호의 오른쪽을 배치해야 할 때 사용할 수 있습니다.

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

형식화 된 텍스트를 화면에 직접 인쇄하려는 경우.

다음과 같이 클래스 십자형을 사용하십시오.

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

출력 : 0000811

정수와 문자열에서 작동하는 내 코드를 확인하십시오.

첫 번째 숫자가 2라고 가정합니다. 그리고 우리는 그것에 0을 추가하여 최종 문자열의 길이가 4가 될 것입니다.

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

다음 코드 사용에 따라 Formatter를 사용해야합니다. 숫자

    int inputNo = 1;
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumIntegerDigits(4);
    nf.setMinimumIntegerDigits(4);
    nf.setGroupingUsed(false);

    System.out.println("Formatted Integer : " + nf.format(inputNo));

출력 : 0001

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

이 접근법의 유일한 문제는 그것이 어떻게 작동하는지 알아 내기 위해 생각 모자를 썼다는 것입니다.

패키지가 필요 없음 :

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

이것은 문자열을 3 자로 채우고 4 개 또는 5 개에 부품을 더 쉽게 추가 할 수 있습니다. 나는 이것이 어떤 식 으로든 완벽한 솔루션이 아니라는 것을 알고 있지만 (특히 큰 패딩 문자열을 원한다면), 나는 그것을 좋아합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top