用零填充字符串的左侧

288
我见过类似的问题这里这里
但我不知道如何在字符串左侧填充零。
输入:"129018" 输出:"0000129018"
输出的总长度应该是10。
20个回答

5

使用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"  

4

基于@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");

1
我更喜欢像这样的简单逻辑方法,而不是其他“聪明”的答案,但我建议使用StringBuffer或StringBuilder。 - Henry

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

这在大多数情况下都可以工作


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

2
这里有另一种方法:
int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)

1

固定长度为10的右侧填充: String.format("%1$-10s", "abc") 固定长度为10的左侧填充: String.format("%1$10s", "abc")


对于不知道美元符号是什么的人,请参考以下链接:https://dev59.com/o9bvs4cB2Jgan1zndmjN#33458861 - Aquarius Power
1
这仍需要将空格替换为零。 - Aquarius Power

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

输出: '输出: '000000测试' '测试' '测试' '0测试'

'

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

为什么你在第一个情况下返回一个错误,而不是异常(如果这是你的要求),你打破了函数的返回模式。为什么你不像第二个情况一样直接返回数字的字符串值(因为这也是通用方法的有效输入)? - A myth

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

0

我已经使用了这个:

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

结果:00123

希望你觉得它有用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接