用零填充string

我在这里和这里看到了类似的问题。

但我没有得到如何留下一个string零。

input:“129018”输出:“0000129018”

总输出长度应该是TEN。

如果你的string只包含数字,你可以使它成为一个整数,然后做填充:

 String.format("%010d", Integer.parseInt(mystring)); 

如果不是, 我想知道如何做到这一点 。

 org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0") 

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

“0”是填充字符

这已经超过2年了,但是当你使用Google“java string format pad left”的时候,结果还是相当高的,所以我认为改进这里已经有用了。

这将填充任何string的总宽度为10,而不必担心parsing错误:

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

如果你想填补权利:

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

你可以用任何字符replace“#”字符,重复你希望string总宽度的次数。 例如,如果你想向左边添加零,那么整个string是15个字符长:

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

这比khachik的答案的好处是,这不会使用Integer.parseInt,它可以抛出一个exception(例如,如果你想打的数字太大,像12147483647)。 缺点是,如果你正在填充已经是一个int,那么你必须将其转换为一个string,并返回,这是不可取的。

所以,如果你确定这是一个整数,khachik的答案很好。 如果不是,那么这是一个可能的策略。

 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(); 
 String str = "129018"; String str2 = String.format("%10s", str).replace(' ', '0'); System.out.println(str2); 

你可以使用apache commons的StringUtils

 StringUtils.leftPad("129018", 10, "0"); 

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

要格式化string使用

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

输出:string:00000wrwer

其中第一个参数是要格式化的string,第二个参数是所需输出长度的长度,第三个参数是string要填充的字符。

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

如果你需要性能和知道string的最大大小使用这个:

 String zeroPad = "0000000000000000"; String str0 = zeroPad.substring(str.length()) + str; 

请注意最大的string大小。 如果它大于StringBuffer的大小,你将得到一个java.lang.StringIndexOutOfBoundsException

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


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

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

对于可变长度:

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

这是另一种方法:

 int pad = 4; char[] temp = (new String(new char[pad]) + "129018").toCharArray() Arrays.fill(temp, 0, pad, '0'); System.out.println(temp) 

使用Google Guava :

Maven的:

 <dependency> <artifactId>guava</artifactId> <groupId>com.google.guava</groupId> <version>14.0.1</version> </dependency> 

示例代码:

 Strings.padStart("129018", 10, '0') returns "0000129018" 

这是我的解决scheme:

 String s = Integer.toBinaryString(5); //Convert decimal to binary int p = 8; //preferred length for(int g=0,j=s.length();g<pj;g++, s= "0" + s); System.out.println(s); 

输出: 00000101

  int number = -1; int holdingDigits = 7; System.out.println(String.format("%0"+ holdingDigits +"d", number)); 

刚才在采访中问了这个……..

我的答案在下面,但这(上面提到)是更好 – >

String.format("%05d", num);

我的答案是:

 static String leadingZeros(int num, int digitSize) { //test for capacity being too small. if (digitSize < String.valueOf(num).length()) { return "Error : you number " + num + " is higher than the decimal system specified capacity of " + digitSize + " zeros."; //test for capacity will exactly hold the number. } else if (digitSize == String.valueOf(num).length()) { return String.valueOf(num); //else do something here to calculate if the digitSize will over flow the StringBuilder buffer java.lang.OutOfMemoryError //else calculate and return string } else { StringBuilder sb = new StringBuilder(); for (int i = 0; i < digitSize; i++) { sb.append("0"); } sb.append(String.valueOf(num)); return sb.substring(sb.length() - digitSize, sb.length()); } } 

检查我的代码将适用于整数和string。

假设我们的第一个数字是129018.而且我们要添加零,所以最终string的长度将是10.为了您可以使用下面的代码

  int number=129018; int requiredLengthAfterPadding=10; String resultString=Integer.toString(number); int inputStringLengh=resultString.length(); int diff=requiredLengthAfterPadding-inputStringLengh; if(inputStringLengh<requiredLengthAfterPadding) { resultString=new String(new char[diff]).replace("\0", "0")+number; } System.out.println(resultString); 

String.format(“%1 $ -10s”,“abc”)填充固定长度的左填充-10:String.format(“%1 $ 10s”,“abc”)

这是一个基于String.format的解决scheme,它将适用于string,并适用于可变长度。

 public static String PadLeft(String stringToPad, int padToLength){ String retValue = null; if(stringToPad.length() < padToLength) { retValue = String.format("%0" + String.valueOf(padToLength - stringToPad.length()) + "d%s",0,stringToPad); } else{ retValue = stringToPad; } return retValue; } public static void main(String[] args) { System.out.println("'" + PadLeft("test", 10) + "'"); System.out.println("'" + PadLeft("test", 3) + "'"); System.out.println("'" + PadLeft("test", 4) + "'"); System.out.println("'" + PadLeft("test", 5) + "'"); } 

输出: '000000test''test''test''0test'

Satish的解决scheme在预期的答案中是非常好的。 我想通过将variablesn添加到格式string而不是10个字符来使其更通用。

 int maxDigits = 10; String str = "129018"; String formatString = "%"+n+"s"; String str2 = String.format(formatString, str).replace(' ', '0'); System.out.println(str2); 

这将在大多数情况下工作

基于@HaroldoMacêdo的回答 ,我在自定义的Utils类中创build了一个方法

 /** * Left padding a string with the given character * * @param str The string to be padded * @param length The total fix length of the string * @param padChar The pad character * @return The padded string */ public static String padLeft(String str, int length, String padChar) { String pad = ""; for (int i = 0; i < length; i++) { pad += padChar; } return pad.substring(str.length()) + str; } 

然后调用Utils.padLeft(str, 10, "0");

我更喜欢这个代码:

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

接着:

 System.out.println(StrMgr.leftPad("hello", 20, "x")); System.out.println(StrMgr.rightPad("hello", 20, "x")); 

我用过这个:

 DecimalFormat numFormat = new DecimalFormat("00000"); System.out.println("Code format: "+numFormat.format(123)); 

结果:00123

希望对你有帮助!