如何格式化前导零的Java字符串?

Roy*_*Roy 169 java string format formatting

这是String,例如:

"Apple"
Run Code Online (Sandbox Code Playgroud)

我想加零以填写8个字符:

"000Apple"
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

Ale*_*kov 300

public class LeadingZerosExample {
    public static void main(String[] args) {
       int number = 1500;

       // String format below will add leading zeros (the %0 syntax) 
       // to the number above. 
       // The length of the formatted string will be 7 characters.

       String formatted = String.format("%07d", number);

       System.out.println("Number with leading zeros: " + formatted);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于Strings(如OP所示). (41认同)
  • 但我想在字符串之前添加前导零而不是int. (12认同)
  • @Variag使用`%07s`代替`%07d`,您将获得`FormatFlagsConversionMismatchException`。你可以试试。 (2认同)

Chr*_*her 262

如果你必须在没有图书馆帮助的情况下这样做:

("00000000" + "Apple").substring("Apple".length())
Run Code Online (Sandbox Code Playgroud)

(Works,只要你的String不超过8个字符.)

  • 这很聪明 - 但我花了大约30秒才"搞定".我认为更可读的解决方案会更好. (14认同)
  • 当您在没有太多空间的情况下嵌入软件时,这是一个非常好的解决方案,并且额外的库不是一个选项.谢谢!! (2认同)
  • @Mathu老实说,这并不难理解.连接两个字符串(连接在一起),从中提取前5个字符.没有魔法.在这种情况下不太明智(对于固定字符串Apple)但很容易理解.`("0000"+ theString).substring(theString.length())`更加真实.这会将"theString"填充为前导零.抱歉无法抗拒添加此评论:) (2认同)
  • 这个解决方案的语法很短,但它不是“疯狂的快”。如果幸运的话,编译器会优化它,但实际上真正的“快速”方法是使用 StringBuilder,它需要一个循环来填充它。如果要求真的只截断 8 个字符的字符串,那也可以,虽然这是一个非常狭窄的用例,但是这个解决方案永远不会被快速调用。它只是很短。 (2认同)

Boz*_*zho 118

 StringUtils.leftPad(yourString, 8, '0');
Run Code Online (Sandbox Code Playgroud)

这是来自commons-lang.见javadoc

  • 即使您无法使用commons-lang,也可以轻松地从StringUtils复制源以创建自己的函数.这将是比选定答案更好的通用解决方案.http://www.docjar.com/html/api/org/apache/commons/lang/StringUtils.java.html (7认同)
  • 如果这是图书馆使用的唯一方法怎么办?也许添加的库甚至比它使用的应用程序大很多倍.我可以想象很多原因*不*在应用程序中添加公共库.不要误会我的意思:我同意,它包含非常有用的东西,但我理解如果不仅需要编写一个(或几个)方法,那么不愿意填充一个充满外部JAR的应用程序. (3认同)
  • 为什么不使用commons-lang?它有一些有用的附加物. (2认同)
  • 要回答_"为什么不使用公共语言?它有一些有用的额外内容."_具体例子的问题.小米在其Android设备上发布了过时的commons-lang版本.在您的应用中包含较新版本会导致类加载器冲突,因此无法在任何Android项目中使用commons-lang. (2认同)

小智 25

这就是他真正要求的我相信:

String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple"); 
Run Code Online (Sandbox Code Playgroud)

输出:

000Apple
Run Code Online (Sandbox Code Playgroud)


小智 24

您可以使用另一个答案中使用的String.format方法生成一个0的字符串,

String.format("%0"+length+"d",0)
Run Code Online (Sandbox Code Playgroud)

这可以通过动态调整格式字符串中前导0的数量来应用于您的问题:

public String leadingZeros(String s, int length) {
     if (s.length() >= length) return s;
     else return String.format("%0" + (length-s.length()) + "d%s", 0, s);
}
Run Code Online (Sandbox Code Playgroud)

它仍然是一个混乱的解决方案,但有一个优点,你可以使用整数参数指定结果字符串的总长度.


Oli*_*ire 17

使用Guava的Strings实用程序类:

Strings.padStart("Apple", 8, '0');
Run Code Online (Sandbox Code Playgroud)


小智 15

你可以用这个:

org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
Run Code Online (Sandbox Code Playgroud)


Erd*_*zgi 7

我一直处于类似情况,我用过这个; 它非常简洁,您不必处理长度或其他库.

String str = String.format("%8s","Apple");
str = str.replace(' ','0');
Run Code Online (Sandbox Code Playgroud)

简单而整洁.字符串格式" Apple"在用零替换空格后返回,它给出了所需的结果.

  • 如果字符串已包含空格怎么办? (3认同)

rob*_*x44 6

String input = "Apple";
StringBuffer buf = new StringBuffer(input);

while (buf.length() < 8) {
  buf.insert(0, '0');
}

String output = buf.toString();
Run Code Online (Sandbox Code Playgroud)


kal*_*ech 5

使用Apache Commons StringUtils.leftPad(或查看代码以创建自己的函数)。