Java int
로 변환 할 때 어떻게 0 String
으로 채 웠습니까?
기본적으로 정수를 9999
앞에 오는 0으로 채우려 고합니다 (예 : 1 = 0001
).
new String(Integer.toString(num + 10000)).substring(1)
경우 접근 방식에 문제가 있습니다 num
.
Java int
로 변환 할 때 어떻게 0 String
으로 채 웠습니까?
기본적으로 정수를 9999
앞에 오는 0으로 채우려 고합니다 (예 : 1 = 0001
).
new String(Integer.toString(num + 10000)).substring(1)
경우 접근 방식에 문제가 있습니다 num
.
답변:
다음 java.lang.String.format(String,Object...)
과 같이 사용하십시오 .
String.format("%05d", yournumber);
길이가 5 인 제로 패딩의 경우 16 진 출력의 d
경우 x
as를로 변경하십시오 "%05x"
.
전체 서식 옵션은의 일부로 설명되어 있습니다 java.util.Formatter
.
String.format
C에서 printf ()와 비슷한 옵션을 기대해야합니까 ?
%012d
%d can't format java.lang.String arguments
다음 11
과 같이 인쇄하고 싶다고 가정 해 봅시다.011
당신은 포맷을 사용할 수 있습니다 : "%03d"
.
이 포맷터를 다음과 같이 사용할 수 있습니다.
int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
또는 일부 Java 메소드는 이러한 포맷터를 직접 지원합니다.
System.out.printf("%03d", a);
F
인 format ()은 다음 f
과 같아야합니다 String.format(...);
.
int prefixLength = requiredTotalLength - String.valueOf(numericValue).length
한 다음 반복 문자열 방법을 사용하여 필요한 접두사를 만듭니다. 문자열을 반복하는 여러 가지 방법이 있지만 네이티브 Java는 없습니다 : stackoverflow.com/questions/1235179/…
어떤 이유로 든 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
for( int i : data ) strData += (i > 9 ? (i > 99 ? "" : "0") : "00") + Integer.toString( i ) + "|";
했습니다 : 그것은 매우 빠르게 작동했습니다 (죄송합니다).
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
, 등
참조 : 구아바
위의 많은 접근 방식이 좋지만 때로는 부동 소수점뿐만 아니라 정수의 형식을 지정해야합니다. 우리는 특히 10 진수의 오른쪽뿐만 아니라 왼쪽에 특정 숫자의 0을 채울 필요가있을 때 이것을 사용할 수 있습니다.
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라고 가정하고 최종 문자열의 길이는 4가되도록 0을 추가하려고합니다. 다음 코드를 사용할 수 있습니다
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);
(new char[diff])
이유
replace("\0", "0")
무엇은 ... 무엇
다음 코드에서 NumberFormat 을 사용하는 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);
}
이 접근법의 유일한 문제점은 그것이 어떻게 작동하는지 파악하기 위해 생각 모자를 착용하게한다는 것입니다.
number
하거나 함께 width
18 이상
패키지가 필요하지 않습니다 :
String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;
이렇게하면 문자열이 3 자로 채워지고 4 ~ 5 개 부분을 더 쉽게 추가 할 수 있습니다. 나는 이것이 어떤 방식으로도 완벽한 해결책이 아니라는 것을 알고 있습니다 (특히 큰 패딩 문자열을 원한다면).