Java 문자열 형식을 사용하여 정수 형식화


129

Java에서 String.format 메소드를 사용하여 0 앞에 정수를 줄 수 있는지 궁금합니다.

예를 들면 다음과 같습니다.

1은 001이됩니다
2는 002가됩니다
...
11은 011이됩니다
12는 012가됩니다
...
526은 526으로 유지됩니다
... 등

현재 다음 코드를 시도했습니다.

String imageName = "_%3d" + "_%s";

for( int i = 0; i < 1000; i++ ){
    System.out.println( String.format( imageName, i, "foo" ) );
}

불행히도이 숫자 앞에는 3 개의 빈 공간이 있습니다. 대신 숫자 앞에 0을 붙일 수 있습니까?


답변:


172

%03d정수의 형식 지정자에서 사용하십시오 . 이는 0숫자가 3 자리 미만인 경우 숫자가 0으로 채워짐을 의미합니다.

Formatter다른 수정 자에 대해서는 문서를 참조하십시오 .


211
String.format("%03d", 1)  // => "001"
//              │││   └── print the number one
//              ││└────── ... as a decimal integer
//              │└─────── ... minimum of 3 characters wide
//              └──────── ... pad with zeroes instead of spaces

자세한 내용 java.util.Formatter은 참조하십시오.


13

apache commons-lang이라는 타사 라이브러리를 사용하는 경우 다음 솔루션이 유용 할 수 있습니다.

StringUtils아파치 commons-lang 클래스 사용 :

int i = 5;
StringUtils.leftPad(String.valueOf(i), 3, "0"); // --> "005"

으로는 StringUtils.leftPad()보다 빠른입니다String.format()


StringUtils.leftPad는 또 다른 좋은 선택이며 더 읽기 쉽고 다른 문자로 채울 수 있다고 주장 할 수 있습니다. 나는 구글을 가지고 있지만 더 빠른 것을 확인하는 것을 찾을 수 없다. 그에 대한 증거를 제공 할 수 있습니까?
내 머리가 아프다

github.com/anilbharadia/JavaPerformanceTests/blob/master/… junit으로 실행하고 시간을 확인하십시오
Anil Bharadia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.