답변:
도서관의 도움없이해야 할 경우 :
("00000000" + "Apple").substring("Apple".length())
(문자열이 8자를 넘지 않는 한 작동합니다.)
("0000" + theString).substring(theString.length())
더 현실적입니다. 이것은 theString
선행 0으로 채워집니다. 죄송합니다이 코멘트를 추가 저항 할 수 없습니다 :)
StringBuilder
, 그것을 채우기 위해 루프가 필요합니다. 요구 사항이 실제로 8 자 문자열 만 잘라야하는 경우 매우 좁은 사용 사례이지만이 솔루션을 결코 빠르게 호출 할 수는 없습니다. 짧습니다.
public class LeadingZerosExample {
public static void main(String[] args) {
int number = 1500;
// String format below will add leading zeros (the %0 syntax)
// to the number above.
// The length of the formatted string will be 7 characters.
String formatted = String.format("%07d", number);
System.out.println("Number with leading zeros: " + formatted);
}
}
%07s
대신 %07d
, 당신은 얻을 것이다 FormatFlagsConversionMismatchException
. 당신은 그것을 시도 할 수 있습니다.
StringUtils.leftPad(yourString, 8, '0');
이것은 commons-lang에서 온 것 입니다. javadoc 참조
이것이 그가 정말로 요구 한 것입니다.
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
산출:
000Apple
DuplicateFormatFlagsException
( 00
형식 문자열의 때문에 ) 8자를 초과하는 문자열을 대체하면 IllegalFormatFlagsException
(음수 때문에)를 던집니다 .
String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
. 이제이 예외는 없습니다.
String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
뿐입니다 String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(1,9);
.
다른 답변에 사용 된 String.format 메소드를 사용하여 0의 문자열을 생성 할 수 있습니다.
String.format("%0"+length+"d",0)
형식 문자열에서 선행 0의 수를 동적으로 조정하여 문제에 적용 할 수 있습니다.
public String leadingZeros(String s, int length) {
if (s.length() >= length) return s;
else return String.format("%0" + (length-s.length()) + "d%s", 0, s);
}
여전히 지저분한 솔루션이지만 정수 인수를 사용하여 결과 문자열의 총 길이를 지정할 수 있다는 장점이 있습니다.
String input = "Apple";
StringBuffer buf = new StringBuffer(input);
while (buf.length() < 8) {
buf.insert(0, '0');
}
String output = buf.toString();
Apache Commons StringUtils.leftPad를 사용하십시오 (또는 자신의 기능을 수행하는 코드를보십시오).
public static void main(String[] args)
{
String stringForTest = "Apple";
int requiredLengthAfterPadding = 8;
int inputStringLengh = stringForTest.length();
int diff = requiredLengthAfterPadding - inputStringLengh;
if (inputStringLengh < requiredLengthAfterPadding)
{
stringForTest = new String(new char[diff]).replace("\0", "0")+ stringForTest;
}
System.out.println(stringForTest);
}
public static String lpad(String str, int requiredLength, char padChar) {
if (str.length() > requiredLength) {
return str;
} else {
return new String(new char[requiredLength - str.length()]).replace('\0', padChar) + str;
}
}
누구든지 SpringUtils 없이이 순수한 Java 솔루션을 사용해 보셨습니까?
//decimal to hex string 1=> 01, 10=>0A,..
String.format("%1$2s", Integer.toString(1,16) ).replace(" ","0");
//reply to original question, string with leading zeros.
//first generates a 10 char long string with leading spaces, and then spaces are
//replaced by a zero string.
String.format("%1$10s", "mystring" ).replace(" ","0");
불행히도이 솔루션은 문자열에 공백이없는 경우에만 작동합니다.
순수 Java로 프로그램을 작성하려면 아래 방법을 따르거나 고급 기능을 향상시키는 데 도움이되는 많은 String Utils가 있습니다.
간단한 정적 방법을 사용하면 아래와 같이 할 수 있습니다.
public static String addLeadingText(int length, String pad, String value) {
String text = value;
for (int x = 0; x < length - value.length(); x++) text = pad + text;
return text;
}
위의 방법을 사용할 수 있습니다 addLeadingText(length, padding text, your text)
addLeadingText(8, "0", "Apple");
출력은 000Apple입니다.
예쁘지는 않지만 작동합니다. 아파치 커먼즈에 액세스 할 수 있다면 사용하는 것이 좋습니다.
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}