Here is the String, for example:
"Apple" and I would like to add zero to fill in 8 chars:
"000Apple" How can I do so?
24 Answers
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); } } 4In case you have to do it without the help of a library:
("00000000" + "Apple").substring("Apple".length()) (Works, as long as your String isn't longer than 8 chars.)
10 StringUtils.leftPad(yourString, 8, '0'); This is from commons-lang. See javadoc
8This is what he was really asking for I believe:
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple"); output:
000Apple 4You can use the String.format method as used in another answer to generate a string of 0's,
String.format("%0"+length+"d",0) This can be applied to your problem by dynamically adjusting the number of leading 0's in a format string:
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); } It's still a messy solution, but has the advantage that you can specify the total length of the resulting string using an integer argument.
Using Guava's Strings utility class:
Strings.padStart("Apple", 8, '0'); You can use this:
org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0") 2I've been in a similar situation and I used this; It is quite concise and you don't have to deal with length or another library.
String str = String.format("%8s","Apple"); str = str.replace(' ','0'); Simple and neat. String format returns " Apple" so after replacing space with zeros, it gives the desired result.
String input = "Apple"; StringBuffer buf = new StringBuffer(input); while (buf.length() < 8) { buf.insert(0, '0'); } String output = buf.toString(); Use Apache Commons StringUtils.leftPad (or look at the code to make your own function).
You can use:
String.format("%08d", "Apple"); It seems to be the simplest method and there is no need of any external library.
3In Java:
String zeroes="00000000"; String apple="apple"; String result=zeroes.substring(apple.length(),zeroes.length())+apple; In Scala:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e} You can also explore a way in Java 8 to do it using streams and reduce (similar to the way I did it with Scala). It's a bit different to all the other solutions and I particularly like it a lot.
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); } } You may have to take care of edgecase. This is a generic method.
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; } } 0public 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 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; } } 1Did anyone tried this pure Java solution (without 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"); Unfortunately this solution works only if you do not have blank spaces in a string.
Solution with method String::repeat (Java 11)
String str = "Apple"; String formatted = "0".repeat(8 - str.length()) + str; If needed change 8 to another number or parameterize it
I like the solution from Pad a String with Zeros
String.format("%1$" + length + "s", inputString).replace(' ', '0'); with length = "8" and inputString = "Apple"
This is fast & works for whatever length.
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); } Can be faster then Chris Lercher answer when most of in String have exacly 8 char
int length = in.length(); return length == 8 ? in : ("00000000" + in).substring(length); in my case on my machine 1/8 faster.
Here is the simple API-less "readable script" version I use for pre-padding a string. (Simple, Readable, and Adjustable).
while(str.length() < desired_length) str = '0'+str; If you want to write the program in pure Java you can follow the below method or there are many String Utils to help you better with more advanced features.
Using a simple static method you can achieve this as below.
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; } You can use the above method addLeadingText(length, padding text, your text)
addLeadingText(8, "0", "Apple"); The output would be 000Apple
It isn't pretty, but it works. If you have access apache commons i would suggest that use that
if (val.length() < 8) { for (int i = 0; i < val - 8; i++) { val = "0" + val; } } 2