用零填充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
希望对你有帮助!