Левое дополнение строки с нулями

Я видел похожие вопросы здесь и здесь.

Но я не получаю, как оставить пэд String с Zero.

ввод: "129018" выход: "0000129018"

Общая длина вывода должна быть TEN.

Ответ 2

org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")

вторым параметром является желаемая длина вывода

"0" - это отступы char

Ответ 3

Это более 2 лет, но это довольно высоко в результатах, когда вы оставили "java string format pad" в Google, поэтому я считаю полезным улучшить то, что здесь уже есть.

Это приведет к тому, что любая строка будет равна общей ширине 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 символов:

String unpadded = "12345"; 
String padded = "000000000000000".substring(unpadded.length()) + unpadded;

//unpadded is "12345"
//padded   is "000000000012345"  

Преимущество этого ответа на khachik заключается в том, что это не использует Integer.parseInt, который может генерировать исключение (например, если число, которое вы хотите использовать, слишком велико, как 12147483647). Недостатком является то, что если то, что вы заполняете, уже является int, тогда вам придется преобразовать его в строку и обратно, что нежелательно.

Итак, если вы точно знаете, что это int, ответ khachik отлично работает. Если нет, то это возможная стратегия.

Ответ 4

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();

Ответ 5

String str = "129018";
String str2 = String.format("%10s", str).replace(' ', '0');
System.out.println(str2);

Ответ 7

Для форматирования строки используйте

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

Где первый аргумент является строкой, которая должна быть отформатирована, второй аргумент - длина требуемой выходной длины, а третий аргумент - char, с которым должна быть добавлена ​​строка.

Используйте ссылку для загрузки jar http://commons.apache.org/proper/commons-lang/download_lang.cgi

Ответ 8

Если вам нужна производительность и знаете максимальный размер строки, используйте это:

String zeroPad = "0000000000000000";
String str0 = zeroPad.substring(str.length()) + str;

Знайте максимальный размер строки. Если он больше размера StringBuffer, вы получите java.lang.StringIndexOutOfBoundsException.

Ответ 9

Старый вопрос, но у меня также есть два метода.


Для фиксированной (предопределенной) длины:

    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();
    }

Ответ 10

Используйте Google Guava:

Maven:

<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>

Пример кода:

Strings.padStart("129018", 10, '0') returns "0000129018"  

Ответ 11

Здесь другой подход:

int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)

Ответ 12

Здесь мое решение:

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

Ответ 13

    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());
    }
}

Ответ 14

Проверьте мой код, который будет работать для integer и String.

Предположим, что наше первое число - 129018. И мы хотим добавить к нему нули, поэтому длина окончательной строки будет равна 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);

Ответ 15

Правая прокладка с длиной фиксации-10: String.format( "% 1 $-10s", "abc" ) Левая прокладка с длиной фиксации 10: String.format( "% 1 $10s", "abc" )

Ответ 16

Вот решение на основе String.format, которое будет работать для строк и подходит для переменной длины.

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) + "'");
}

Вывод: '000000test' 'контрольная работа' 'контрольная работа' '0test'

Ответ 17

Решение Satish очень хорошее среди ожидаемых ответов. Я хотел сделать его более общим, добавив переменную n для форматирования строки вместо 10 символов.

int maxDigits = 10;
String str = "129018";
String formatString = "%"+n+"s";
String str2 = String.format(formatString, str).replace(' ', '0');
System.out.println(str2);

Это будет работать в большинстве ситуаций

Ответ 18

Основываясь на @Haroldo Macêdo answer, я создал метод в своем классе Utils, например

/**
 * 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");

Ответ 19

Я предпочитаю этот код:

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"));

Ответ 20

Я использовал это:

DecimalFormat numFormat = new DecimalFormat("00000");
System.out.println("Code format: "+numFormat.format(123));

Результат: 00123

Надеюсь, вы сочтете это полезным!