如何用前导零格式化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; } }