Programing

선행 0으로 Java 문자열을 포맷하는 방법

c10106 2022. 5. 15. 07:15
반응형

선행 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

반응형