在字符串前面添加前导零

21
我想在字符串前添加一些零,使总长度为八个字符。例如:
123 应该是 00000123 1243 应该是 00001234 123456 应该是 00123456 12345678 应该是 12345678
最简单的方法是什么?

1
你的意思似乎是“前导零”,而不是“尾随零”。 - Henry Keiter
6个回答

36

一个俗套的小技巧

String str = "123";
String formatted = ("00000000" + str).substring(str.length())

如果您从一个数字开始:

Int number = 123;
String formatted = String.format("%08d", number);

2
这个小巧的技巧值得记住,适用于许多不同的编程语言,例如你不经常使用的SQL方言。 - Levin Magruder
1
第一个例子一开始看起来不错,但如果原始数字超过8位数,它就会出错。此外,如果您使用整数或长整型进行("00000000" + number)操作,它将以字符串形式提供结果。但第二个选项会更安全。 - pablisco

30

使用 String.format() 方法,它已经有相应的格式化参数了:

String.format("%08d", myInteger);

更一般地,参见Formatter的Java文档。它有很多好玩的东西 - 比你第一眼看到的更多。


1
它不能用于字符串,因为填充将会是空格。 - Jean-Bernard Pellerin
嗯,是的,好的,它对于数字并不完全像这样。 - fge
太好了。那正是我需要的。 - ncmathsadist

11

使用 Apache Common Langs 库:

StringUtils.leftPad(str, 8, '0');

7

使用DecimalFormat

static public void main(String[] args) {
    int vals[] = {123, 1243, 123456, 12345678};
    DecimalFormat decimalFormat = new DecimalFormat("00000000");
    for (int val : vals) {
        System.out.println(decimalFormat.format(val));
    }
}

输出:

00000123
00001243
00123456
12345678

4
为什么不自己写一个简单的填充函数呢?我知道有库可以使用,但这是一项非常简单的任务。
System.out.println(padStr(123, "0", 8));
System.out.println(padStr(1234, "0", 8));
System.out.println(padStr(123456, "0", 8));
System.out.println(padStr(12345678, "0", 8));       

public String padStr(int val, String pad, int len) {
  String str = Integer.toString(val);
  while (str.length() < len)
    str = pad + str;
  return str;
}

2
这将在循环的每次迭代中产生一个新的 StringBuilder 和一个新的 String。 - whiskeysierra

1
public static void main(String[] args)
{
    String stringForTest = "123";
    int requiredLengthAfterPadding = 8;
    int inputStringLengh = stringForTest.length();
    int diff = requiredLengthAfterPadding - inputStringLengh;
    if (inputStringLengh < requiredLengthAfterPadding)
    {
        stringForTest = new String(new char[diff]).replace("\0", "0")+ stringForTest;
    }
    System.out.println(stringForTest);
}

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