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

下面是字符串,例如:

"Apple"

我想加零来填充8个字符:

"000Apple"

我该怎么做呢?

392971 次浏览
 StringUtils.leftPad(yourString, 8, '0');

它来自commons lang看到javadoc

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

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

这并不漂亮,但很有效。如果你有apache commons,我建议你使用它

if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}
public class PaddingLeft {
public static void main(String[] args) {
String input = "Apple";
String result = "00000000" + input;
int length = result.length();
result = result.substring(length - 8, length);
System.out.println(result);
}
}

以防你不得不在没有库的帮助下做这件事:

("00000000" + "Apple").substring("Apple".length())

(工作,只要你的字符串不超过8个字符。)

你可能得处理edgecase。这是一个泛型方法。

public class Test {
public static void main(String[] args){
System.out.println(padCharacter("0",8,"hello"));
}
public static String padCharacter(String c, int num, String str){
for(int i=0;i<=num-str.length()+1;i++){str = c+str;}
return str;
}
}
String input = "Apple";
StringBuffer buf = new StringBuffer(input);


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


String output = buf.toString();
public static void main(String[] args)
{
String stringForTest = "Apple";
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);
}

你可以使用字符串。格式化方法,用于另一个答案生成一个0的字符串,

String.format("%0"+length+"d",0)

这可以通过动态调整格式字符串中前导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);
}

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

这是快速&对任何长度都适用。

public static String prefixZeros(String value, int len) {
char[] t = new char[len];
int l = value.length();
int k = len-l;
for(int i=0;i<k;i++) { t[i]='0'; }
value.getChars(0, l, t, k);
return new String(t);
}

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

String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");

输出:

000Apple

可以更快,然后克里斯·勒彻的答案当大多数在字符串有确切的8个字符

int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);

在我的情况下,我的机器快了1/8。

你可以用这个:

org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")

使用Guava的Strings实用程序类:

Strings.padStart("Apple", 8, '0');

我也遇到过类似的情况,我用了这个;它是非常简洁的,你不需要处理长度或其他库。

String str = String.format("%8s","Apple");
str = str.replace(' ','0');

简单而利落。字符串格式返回" Apple",因此在用零替换空格后,它会给出所需的结果。

下面是我用于预填充字符串的简单的无api“可读脚本”版本。(简单,可读,可调)。

while(str.length() < desired_length)
str = '0'+str;
public static String lpad(String str, int requiredLength, char padChar) {
if (str.length() > requiredLength) {
return str;
} else {
return new String(new char[requiredLength - str.length()]).replace('\0', padChar) + str;
}
}

在Java中:

String zeroes="00000000";
String apple="apple";


String result=zeroes.substring(apple.length(),zeroes.length())+apple;

在Scala中:

"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}

你也可以在Java 8中探索一种使用流和简化的方法(类似于我用Scala做的方法)。它和其他的解决方案有点不同,我特别喜欢它。

有人尝试过这个纯Java解决方案吗(没有SpringUtils):

//decimal to hex string 1=> 01, 10=>0A,..
String.format("%1$2s", Integer.toString(1,16) ).replace(" ","0");
//reply to original question, string with leading zeros.
//first generates a 10 char long string with leading spaces, and then spaces are
//replaced by a zero string.
String.format("%1$10s", "mystring" ).replace(" ","0");

不幸的是,这个解决方案只有在字符串中没有空格时才有效。

如果你想用纯Java编写程序,你可以遵循下面的方法,或者有很多String Utils可以帮助你更好地使用更高级的功能。

使用一个简单的静态方法可以实现如下所示。

public static String addLeadingText(int length, String pad, String value) {
String text = value;
for (int x = 0; x < length - value.length(); x++) text = pad + text;
return text;
}

你可以使用上面的方法addLeadingText(length, padding text, your text)

addLeadingText(8, "0", "Apple");

输出将是000年,苹果

使用方法String::repeat的解决方案(Java 11)

String str = "Apple";
String formatted = "0".repeat(8 - str.length()) + str;

如果需要,将8更改为其他数字或将其参数化

你可以使用:

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

这似乎是最简单的方法,不需要任何外部库。

我喜欢用零填充字符串的解决方案

String.format("%1$" + length + "s", inputString).replace(' ', '0');

长度= "8"and inputString = "苹果"