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

In 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

8

This is what he was really asking for I believe:

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

output:

000Apple 
4

You 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") 
2

I'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.

1
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.

3

In 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; } } 
0
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 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; } } 
1

Did 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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy