문자열에 제로를 채우다
하지만 스트링에 제로를 채우는 방법은 알 수가 없어요.
입력: "129018" 출력: "0000129018"
총 출력 길이는 TEN이어야 합니다.
문자열에 숫자만 포함되어 있는 경우 이를 정수로 만든 후 패딩을 수행할 수 있습니다.
String.format("%010d", Integer.parseInt(mystring));
String paddedString = org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")
두 번째 파라미터는 원하는 출력 길이입니다.
"0"은 패딩 문자입니다.
이렇게 하면 구문 분석 오류를 걱정하지 않고 모든 문자열이 총 너비 10으로 패딩됩니다.
String unpadded = "12345"; 
String padded = "##########".substring(unpadded.length()) + unpadded;
//unpadded is "12345"
//padded   is "#####12345"
오른쪽 패드를 채우려면:
String unpadded = "12345"; 
String padded = unpadded + "##########".substring(unpadded.length());
//unpadded is "12345"
//padded   is "12345#####"  
문자열의 전체 너비를 원하는 횟수만큼 반복하여 "#" 문자를 패드로 바꿀 수 있습니다.예를 들어, 문자열 전체가 15자 길이로 되도록 왼쪽에 0을 추가하는 경우:
String unpadded = "12345"; 
String padded = "000000000000000".substring(unpadded.length()) + unpadded;
//unpadded is "12345"
//padded   is "000000000012345"  
Khachik의 답변에 비해 이 방법은 Integer.parseInt를 사용하지 않는다는 장점이 있습니다.Integer.parseInt는 예외를 발생시킬 수 있습니다(예를 들어 패딩하려는 숫자가 121473483647과 같이 너무 큰 경우).단점은 패딩하는 내용이 이미 int인 경우 String으로 변환한 후 다시 변환해야 한다는 것입니다.이것은 바람직하지 않습니다.
그래서 int라는 걸 확실히 안다면 Khachik의 답변이 잘 맞습니다.그렇지 않은 경우 가능한 전략입니다.
String str = "129018";
String str2 = String.format("%10s", str).replace(' ', '0');
System.out.println(str2);
String str = "129018";
StringBuilder sb = new StringBuilder();
for (int toPrepend=10-str.length(); toPrepend>0; toPrepend--) {
    sb.append('0');
}
sb.append(str);
String result = sb.toString();
Apache Commons String Utils를 사용할 수 있습니다.
StringUtils.leftPad("129018", 10, "0");
문자열 형식을 지정하려면
import org.apache.commons.lang.StringUtils;
public class test {
    public static void main(String[] args) {
        String result = StringUtils.leftPad("wrwer", 10, "0");
        System.out.println("The String : " + result);
    }
}
출력 : 문자열 : 00000wrwer
첫 번째 인수는 포맷할 문자열이고 두 번째 인수는 원하는 출력 길이의 길이입니다.세 번째 인수는 문자열을 패딩하는 문자입니다.
링크를 사용하여 항아리 다운로드http://commons.apache.org/proper/commons-lang/download_lang.cgi
퍼포먼스가 필요하고 문자열의 최대 크기를 알고 있는 경우 다음을 사용합니다.
String zeroPad = "0000000000000000";
String str0 = zeroPad.substring(str.length()) + str;
최대 문자열 크기에 주의하십시오.String Buffer 사이즈보다 클 경우,java.lang.StringIndexOutOfBoundsException.
오래된 질문이지만 두 가지 방법도 있습니다.
고정(사전 정의된) 길이의 경우:
    public static String fill(String text) {
        if (text.length() >= 10)
            return text;
        else
            return "0000000000".substring(text.length()) + text;
    }
가변 길이의 경우:
    public static String fill(String text, int size) {
        StringBuilder builder = new StringBuilder(text);
        while (builder.length() < size) {
            builder.append('0');
        }
        return builder.toString();
    }
메이븐:
<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>
샘플 코드:
Strings.padStart("129018", 10, '0') returns "0000129018"  
다음 코드를 선호합니다.
public final class StrMgr {
    public static String rightPad(String input, int length, String fill){                   
        String pad = input.trim() + String.format("%"+length+"s", "").replace(" ", fill);
        return pad.substring(0, length);              
    }       
    public static String leftPad(String input, int length, String fill){            
        String pad = String.format("%"+length+"s", "").replace(" ", fill) + input.trim();
        return pad.substring(pad.length() - length, pad.length());
    }
}
그 후:
System.out.println(StrMgr.leftPad("hello", 20, "x")); 
System.out.println(StrMgr.rightPad("hello", 20, "x"));
@Haroldo Macédo의 답변을 바탕으로 제 커스텀으로 메서드를 만들었습니다.Utils의 such such 의 클래스
/**
 * Left padding a string with the given character
 *
 * @param str     The string to be padded
 * @param length  The total fix length of the string
 * @param padChar The pad character
 * @return The padded string
 */
public static String padLeft(String str, int length, String padChar) {
    String pad = "";
    for (int i = 0; i < length; i++) {
        pad += padChar;
    }
    return pad.substring(str.length()) + str;
}
 전화 주세요.Utils.padLeft(str, 10, "0");
또 다른 접근방식은 다음과 같습니다.
int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)
제 해결책은 다음과 같습니다.
String s = Integer.toBinaryString(5); //Convert decimal to binary
int p = 8; //preferred length
for(int g=0,j=s.length();g<p-j;g++, s= "0" + s);
System.out.println(s);
출력: 00000101
오른쪽 패딩에 fix length-10: String.format("%1$-10s", "abc") fix length-10: String 왼쪽 패딩.포맷 ("%1$10s", "format")
다음은 String을 기반으로 한 솔루션입니다.문자열에 적합하고 가변 길이에 적합한 형식입니다.
public static String PadLeft(String stringToPad, int padToLength){
    String retValue = null;
    if(stringToPad.length() < padToLength) {
        retValue = String.format("%0" + String.valueOf(padToLength - stringToPad.length()) + "d%s",0,stringToPad);
    }
    else{
        retValue = stringToPad;
    }
    return retValue;
}
public static void main(String[] args) {
    System.out.println("'" + PadLeft("test", 10) + "'");
    System.out.println("'" + PadLeft("test", 3) + "'");
    System.out.println("'" + PadLeft("test", 4) + "'");
    System.out.println("'" + PadLeft("test", 5) + "'");
}
출력: '000000 테스트' '테스트' '0 테스트'
사티쉬의 해답은 기대했던 답변 중 매우 좋다.형식 문자열에 10자가 아닌 변수 n을 추가하여 보다 일반적이게 만들고 싶었습니다.
int maxDigits = 10;
String str = "129018";
String formatString = "%"+n+"s";
String str2 = String.format(formatString, str).replace(' ', '0');
System.out.println(str2);
이것은 대부분의 상황에서 기능합니다.
    int number = -1;
    int holdingDigits = 7;
    System.out.println(String.format("%0"+ holdingDigits +"d", number));
방금 면접에서 물어봤는데….
아래 답변은 이쪽이 더 좋습니다.->
String.format("%05d", num);
답변은 다음과 같습니다.
static String leadingZeros(int num, int digitSize) {
    //test for capacity being too small.
    if (digitSize < String.valueOf(num).length()) {
        return "Error : you number  " + num + " is higher than the decimal system specified capacity of " + digitSize + " zeros.";
        //test for capacity will exactly hold the number.
    } else if (digitSize == String.valueOf(num).length()) {
        return String.valueOf(num);
        //else do something here to calculate if the digitSize will over flow the StringBuilder buffer java.lang.OutOfMemoryError 
        //else calculate and return string
    } else {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < digitSize; i++) {
            sb.append("0");
        }
        sb.append(String.valueOf(num));
        return sb.substring(sb.length() - digitSize, sb.length());
    }
}
정수와 문자열로 동작하는 코드를 확인합니다.
첫 번째 번호가 129018이라고 가정해봐여기에 0을 더하면 마지막 문자열의 길이는 10이 됩니다.그러기 위해 다음 코드를 사용할 수 있습니다.
    int number=129018;
    int requiredLengthAfterPadding=10;
    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);
사용한 적이 있습니다.
DecimalFormat numFormat = new DecimalFormat("00000");
System.out.println("Code format: "+numFormat.format(123));
결과: 00123
유용하게 쓰시길 바랍니다!
언급URL : https://stackoverflow.com/questions/4469717/left-padding-a-string-with-zeros
'programing' 카테고리의 다른 글
| HTML5 localStorage에 개체를 저장하는 방법 (0) | 2022.09.18 | 
|---|---|
| MySQL에서 필드가 null인지 빈지 확인하는 방법 (0) | 2022.09.18 | 
| IF 문의 & (AND) 및 | (OR) (0) | 2022.09.18 | 
| 가상 환경 내에서 pip 자체를 업데이트/업그레이드하려면 어떻게 해야 합니까? (0) | 2022.09.18 | 
| MySQL > 테이블이 존재하지 않습니다.하지만 그렇다(혹은 그래야 한다) (0) | 2022.09.18 |