左边填充一个带零的字符串

jai*_*jai 240 java string padding

我在这里这里看过类似的问题.

但是我没有得到如何用Zero填充String.

输入:"129018"输出:"0000129018"

总输出长度应为TEN.

kha*_*hik 345

如果您的字符串仅包含数字,则可以将其设为整数,然后执行填充:

String.format("%010d", Integer.parseInt(mystring));
Run Code Online (Sandbox Code Playgroud)

如果不是,我想知道如何做到.

  • 此外,对于那些想要用不是"0"的其他东西填充数字/字符串的人,将'%0`更改为'%yourchoice`. (8认同)
  • 对于像"9999999999"这样的大整数值,`String.format()`支持`BigInteger`,如下所示:`String.format("%010d",new BigInteger("9999999999"))` (8认同)
  • 请注意:此解决方案因较大的整数值而失败(例如:"9999999999"); 因此我使用Apache commons与Oliver Michels解决方案一起使用. (4认同)
  • 正在拔我的头发,因为我没有看到我必须执行 Integer.parseInt()。 (2认同)
  • @micnguyen你确定吗?“%”之后的“ 0”是一个标志。可能的标志非常有限。 (2认同)

Oli*_*els 135

String paddedString = org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")
Run Code Online (Sandbox Code Playgroud)

第二个参数是所需的输出长度

"0"是填充字符

  • 正如提醒一样......`String`是不可变的(参见*[String是不可变的.究竟是什么意思?](http://stackoverflow.com/q/8798403/1064325)*),所以`StringUtils.leftPad (变量,10,"0");`不会改变`variable`的值.您需要将结果分配给它,如下所示:`variable = StringUtils.leftPad(variable,10,"0");`. (24认同)

Ric*_* II 104

这将填充任何字符串,总宽度为10,而不必担心解析错误:

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

//unpadded is "12345"
//padded   is "#####12345"
Run Code Online (Sandbox Code Playgroud)

如果你想要右键:

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

//unpadded is "12345"
//padded   is "12345#####"  
Run Code Online (Sandbox Code Playgroud)

您可以将"#"字符替换为您要填充的任何字符,重复您希望字符串总宽度的次数.例如,如果要在左侧添加零,以便整个字符串长度为15个字符:

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

//unpadded is "12345"
//padded   is "000000000012345"  
Run Code Online (Sandbox Code Playgroud)

这比khachik的答案的好处是,它不使用Integer.parseInt,它可以抛出异常(例如,如果要填充的数字太大,如12147483647).缺点是,如果你填充的内容已经是int,那么你必须将它转换为String并返回,这是不可取的.

所以,如果你确定它是一个int,那么khachik的答案很有用.如果没有,那么这是一种可能的策略.

  • 可能需要小心被填充的字符串的长度 - 对substring()的调用可能会抛出IndexOutOfBoundsException. (7认同)
  • 为什么这个被投票?它与JavaScript有关,而不是Java? (3认同)
  • @mhvelplund它是由Ri​​ck于3月2日编辑的,我认为他犯了一个错误,我已经撤消了这个改变. (2认同)

the*_*ejh 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();
Run Code Online (Sandbox Code Playgroud)

  • +1是唯一没有使用外部库的正确答案 (8认同)

小智 50

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

  • 如果字符串中有空格,这将无效... (6认同)
  • @PaulW:但它适用于字符串 (3认同)
  • 这是一种比公认的答案更为迂回的方法。 (2认同)

小智 16

您可以使用apache commons StringUtils

StringUtils.leftPad("129018", 10, "0");
Run Code Online (Sandbox Code Playgroud)

http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/StringUtils.html


Nag*_*S R 13

格式化字符串使用

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

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:字符串:00000wrwer

第一个参数是要格式化的字符串,第二个参数是所需输出长度的长度,第三个参数是要用于填充字符串的char.

使用链接下载jar http://commons.apache.org/proper/commons-lang/download_lang.cgi


Har*_*edo 10

如果您需要性能并知道字符串的最大大小,请使用以下命令:

String zeroPad = "0000000000000000";
String str0 = zeroPad.substring(str.length()) + str;
Run Code Online (Sandbox Code Playgroud)

请注意最大字符串大小.如果它大于StringBuffer大小,你会得到一个java.lang.StringIndexOutOfBoundsException.


use*_*421 6

一个老问题,但我也有两种方法。


对于固定(预定义)长度:

    public static String fill(String text) {
        if (text.length() >= 10)
            return text;
        else
            return "0000000000".substring(text.length()) + text;
    }
Run Code Online (Sandbox Code Playgroud)

对于可变长度:

    public static String fill(String text, int size) {
        StringBuilder builder = new StringBuilder(text);
        while (builder.length() < size) {
            builder.append('0');
        }
        return builder.toString();
    }
Run Code Online (Sandbox Code Playgroud)


Tho*_*Tho 5

使用谷歌番石榴

马文:

<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

示例代码:

Strings.padStart("129018", 10, '0') returns "0000129018"  
Run Code Online (Sandbox Code Playgroud)


str*_*ing 5

我更喜欢这个代码:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

进而:

System.out.println(StrMgr.leftPad("hello", 20, "x")); 
System.out.println(StrMgr.rightPad("hello", 20, "x"));
Run Code Online (Sandbox Code Playgroud)