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

java string padding

397443 просмотра

20 ответа

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

Но я не понимаю, как оставить строку с нулем.

вход: «129018» выход: «0000129018»

Общая длина выхода должна быть ДЕСЯТЬ.

Автор: jai Источник Размещён: 12.11.2019 09:56

Ответы (20)


344 плюса

Решение

Если ваша строка содержит только цифры, вы можете сделать ее целым числом, а затем выполнить заполнение:

String.format("%010d", Integer.parseInt(mystring));

Если нет, я хотел бы знать, как это можно сделать .

Автор: khachik Размещён: 17.12.2010 10:49

135 плюса

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

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

«0» - символ заполнения

Автор: Oliver Michels Размещён: 17.12.2010 10:57

101 плюса

Это позволит заполнить любую строку общей шириной 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"  

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

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

Автор: Rick Hanlon II Размещён: 27.02.2013 10:54

51 плюса

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();
Автор: thejh Размещён: 17.12.2010 10:47

50 плюса

String str = "129018";
String str2 = String.format("%10s", str).replace(' ', '0');
System.out.println(str2);
Автор: Satish Размещён: 25.05.2011 08:29

16 плюса

Вы можете использовать Apache Commons StringUtils

StringUtils.leftPad("129018", 10, "0");

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#leftPad(java.lang.String,%20int,%20char)

Автор: thk Размещён: 17.12.2010 11:02

13 плюса

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

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

Автор: Nagarajan S R Размещён: 07.01.2014 11:58

10 плюса

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

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

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

Автор: Haroldo Macedo Размещён: 29.07.2015 07:44

4 плюса

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


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

    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();
    }
Автор: Carlos Heuberger Размещён: 25.05.2011 09:05

4 плюса

Используйте 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"  
Автор: Tho Размещён: 03.05.2015 07:44

4 плюса

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

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"));
Автор: strobering Размещён: 16.09.2016 05:35

3 плюса

Основываясь на ответе @Haroldo Macêdo , я создал метод в своем собственном 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");

Автор: Sithu Размещён: 08.05.2016 04:10

2 плюса

Вот еще один подход:

int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)
Автор: nullpotent Размещён: 19.08.2013 05:38

2 плюса

Вот мое решение:

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

Автор: sh3r1 Размещён: 24.08.2016 07:30

1 плюс

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

Автор: Arun Размещён: 20.11.2014 11:22

1 плюс

Вот решение на основе 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' 'test' 'test' '0test'

Автор: P.V.M. Kessels Размещён: 29.07.2015 07:25

1 плюс

Решение от 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);

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

Автор: Prabhu Размещён: 02.03.2016 04:30

0 плюса

    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());
    }
}
Автор: bockymurphy Размещён: 26.04.2013 02:19

0 плюса

Проверьте мой код, который будет работать для целых чисел и строк.

Предположим, что наше первое число - 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);
Автор: Fathah Rehman P Размещён: 24.07.2014 10:31

0 плюса

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

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

Результат: 00123

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

Автор: Carlos Muñoz Размещён: 27.06.2016 09:37
Вопросы из категории :
32x32