如何用前导零格式化Javastring?

这里是string,例如:

"Apple" 

我想补零填写8个字符:

 "000Apple" 

我怎么能这样做?

如果你不得不在图书馆的帮助下做到这一点:

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

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

 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); } } 
  StringUtils.leftPad(yourString, 8, '0'); 

这是来自commons-lang 。 见javadoc

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

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

输出:

 000Apple 

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

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

这可以通过dynamic调整格式string中前导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); } 

这仍然是一个混乱的解决scheme,但具有的优点是,您可以使用整数参数指定结果string的总长度。

使用番石榴Strings实用程序类:

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

你可以使用这个:

 org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0") 
 String input = "Apple"; StringBuffer buf = new StringBuffer(input); while (buf.length() < 8) { buf.insert(0, '0'); } String output = buf.toString(); 

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

你可能需要照顾边缘。 这是一个通用的方法。

 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 str = String.format("%8s","Apple"); str = str.replace(' ','0'); 

简单而整齐。 string格式返回" Apple"所以用零replace空间后,它会给出所需的结果。

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

这是快速和适用于任何长度。

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

可以更快,然后克里斯Lercher回答时,大部分在string中有8个字符

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

在我的机器上我的机器1/8更快。

这里是我用于预填充string的简单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; } } 

这不是漂亮,但它的作品。 如果你有访问Apache的常见问题,我会build议使用

 if (val.length() < 8) { for (int i = 0; i < val - 8; i++) { val = "0" + val; } }