선행 0으로 Java 문자열을 포맷하는 방법
예를 들어 String이 여기에 있다.
"Apple"
0을 추가하여 8자 입력:
"000Apple"
어떻게 그럴 수가 있지?
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);
}
}
라이브러리의 도움 없이 이 작업을 수행해야 하는 경우:
("00000000" + "Apple").substring("Apple".length())
(Works, String이 8자 이하인 경우)
StringUtils.leftPad(yourString, 8, '0');
이것이 그가 정말로 부탁한 것이다. 나는 다음과 같이 믿는다.
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
출력:
000Apple
스트링을 사용할 수 있다.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);
}
여전히 지저분한 해결책이지만 정수 인수를 사용하여 결과 문자열의 총 길이를 지정할 수 있다는 장점이 있다.
Guava의 유틸리티 클래스 사용:
Strings.padStart("Apple", 8, '0');
다음을 사용할 수 있다.
org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
나는 비슷한 상황에 처해 왔고 이것을 사용했다; 그것은 꽤 간결하고 길거나 다른 도서관을 다룰 필요가 없다.
String str = String.format("%8s","Apple");
str = str.replace(' ','0');
심플하고 깔끔하다.문자열 형식 반환" Apple"
그래서 공간을 0으로 바꾼 후에 원하는 결과를 준다.
String input = "Apple";
StringBuffer buf = new StringBuffer(input);
while (buf.length() < 8) {
buf.insert(0, '0');
}
String output = buf.toString();
Apache Commons StringUtils.leftPad를 사용하십시오(또는 코드를 확인하여 자신의 기능을 직접 만드십시오).
사용할 수 있는 항목:
String.format("%08d", "Apple");
가장 간단한 방법인 것 같고 외부 도서관이 필요 없다.
Java의 경우:
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
스칼라에서:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
또한 스트림을 이용하여 하는 방법과 (스칼라로 한 방법과 유사하게) 줄일 수 있는 자바 8의 방법을 탐색할 수 있다.다른 모든 해결책과는 조금 다르며 나는 특히 그것을 많이 좋아한다.
public class PaddingLeft {
public static void main(String[] args) {
String input = "Apple";
String result = "00000000" + input;
int length = result.length();
result = result.substring(length - 8, length);
System.out.println(result);
}
}
에지케이스를 처리해야 할지도 모른다.이것은 일반적인 방법이다.
public class Test {
public static void main(String[] args){
System.out.println(padCharacter("0",8,"hello"));
}
public static String padCharacter(String c, int num, String str){
for(int i=0;i<=num-str.length()+1;i++){str = c+str;}
return str;
}
}
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");
불행히도 이 솔루션은 문자열에 공백이 없는 경우에만 작동한다.
메서드 문자열이 있는 솔루션::repeat(Java 11)
String str = "Apple";
String formatted = "0".repeat(8 - str.length()) + str;
필요한 경우 8을 다른 번호로 변경하거나 매개 변수를 지정하십시오.
나는 0으로 끈을 채우는 것이 좋다.
String.format("%1$" + length + "s", inputString).replace(' ', '0');
길이 = "8" 및 입력 문자열 = "Apple"로 표시
이것은 빠르고 길이가 얼마가 되든 효과가 있다.
public static String prefixZeros(String value, int len) {
char[] t = new char[len];
int l = value.length();
int k = len-l;
for(int i=0;i<k;i++) { t[i]='0'; }
value.getChars(0, l, t, k);
return new String(t);
}
Chris Lercher가 String에 있는 대부분의 문자 수가 8자일 때 응답하는 속도보다 빠를 수 있음
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
8분의 1 더 빨리 기계를 작동시킬 수 있을 겁니다
여기에 내가 문자열을 사전 패딩할 때 사용하는 간단한 API-less "읽을 수 있는 스크립트" 버전이 있다. (단순, 읽기 및 조절 가능).
while(str.length() < desired_length)
str = '0'+str;
순수한 Java로 프로그램을 작성하려면 아래 방법을 따르거나 String Utility가 많아 고급 기능을 더 잘 활용할 수 있다.
간단한 정적 방법을 사용하면 다음과 같이 이를 달성할 수 있다.
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");
생산량은 000애플일 것이다.
예쁘지는 않지만 효과가 있다.만약 당신이 아파치 공유지에 접근할 수 있다면, 나는 그것을 사용하는 것을 제안할 것이다.
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}
참조URL: https://stackoverflow.com/questions/4051887/how-to-format-a-java-string-with-leading-zero
'Programing' 카테고리의 다른 글
외부와 콘스탄트 혼합 (0) | 2022.05.16 |
---|---|
공리 호출에 성공한 후 Vue.js 구성 요소가 상위 구성 요소로 방출되지 않음 (0) | 2022.05.15 |
OpenGL 메서드만 사용하여 텍스트를 그리는 방법 (0) | 2022.05.15 |
Spring Java Config: 런타임 인수를 사용하여 프로토타입 범위 @Bean을 만드는 방법 (0) | 2022.05.14 |
vue-i18n - '알 수 없는' 토큰 유형 감지 (0) | 2022.05.14 |