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

java string padding

397443 просмотра

20 ответа

8876 Репутация автора

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

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

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

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

Автор: jai Источник Размещён: 17.12.2010 10:45

Ответы (20)


51 плюса

35492 Репутация автора

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

344 плюса

22334 Репутация автора

Решение

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

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

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

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

135 плюса

2418 Репутация автора

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

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

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

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

16 плюса

169 Репутация автора

Вы можете использовать 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

50 плюса

517 Репутация автора

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

4 плюса

25581 Репутация автора

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


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

    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

101 плюса

13103 Репутация автора

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

0 плюса

31 Репутация автора

    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

2 плюса

8550 Репутация автора

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

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

13 плюса

931 Репутация автора

Для форматирования 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

0 плюса

6480 Репутация автора

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

Предположим, что наше первое число - 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

1 плюс

11 Репутация автора

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

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

4 плюса

13063 Репутация автора

Используйте 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

1 плюс

11 Репутация автора

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

10 плюса

155 Репутация автора

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

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

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

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

1 плюс

3088 Репутация автора

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

3 плюса

3164 Репутация автора

Основываясь на ответе @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

0 плюса

21 Репутация автора

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

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

Результат: 00123

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

Автор: Carlos Muñoz Размещён: 27.06.2016 09:37

2 плюса

21 Репутация автора

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

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

4 плюса

111 Репутация автора

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

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
Вопросы из категории :
32x32