왼쪽에 0을 사용하여 정수를 어떻게 만들려면?
-
19-08-2019 - |
문제
패드 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')
이 예를 찾았습니다 ... 테스트 ...
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 개에 부품을 더 쉽게 추가 할 수 있습니다. 나는 이것이 어떤 식 으로든 완벽한 솔루션이 아니라는 것을 알고 있지만 (특히 큰 패딩 문자열을 원한다면), 나는 그것을 좋아합니다.