How to format a Java string with leading zero?

JavaStringFormattingFormat

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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

Solution 2 - Java

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

Solution 3 - Java

Solution 4 - Java

This is what he was really asking for I believe:

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

output:

000Apple

Solution 5 - Java

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.

Solution 6 - Java

Using Guava's Strings utility class:

Strings.padStart("Apple", 8, '0');

Solution 7 - Java

You can use this:

org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")

Solution 8 - Java

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.

Solution 9 - Java

String input = "Apple";
StringBuffer buf = new StringBuffer(input);

while (buf.length() < 8) {
  buf.insert(0, '0');
}

String output = buf.toString();

Solution 10 - Java

Use Apache Commons StringUtils.leftPad (or look at the code to make your own function).

Solution 11 - Java

You can use:

String.format("%08d", "Apple");

It seems to be the simplest method and there is no need of any external library.

Solution 12 - Java

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.

Solution 13 - Java

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

Solution 14 - Java

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

Solution 15 - Java

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

Solution 16 - Java

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

Solution 17 - Java

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 18 - Java

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

Solution 19 - Java

I like the solution from Pad a String with Zeros

String.format("%1$" + length + "s", inputString).replace(' ', '0');

with length = "8" and inputString = "Apple"

Solution 20 - Java

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

Solution 21 - Java

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.

Solution 22 - Java

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;

Solution 23 - Java

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

Solution 24 - Java

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRoyView Question on Stackoverflow
Solution 1 - JavaAlex RashkovView Answer on Stackoverflow
Solution 2 - JavaChris LercherView Answer on Stackoverflow
Solution 3 - JavaBozhoView Answer on Stackoverflow
Solution 4 - Javauser4231709View Answer on Stackoverflow
Solution 5 - JavaChadyWadyView Answer on Stackoverflow
Solution 6 - JavaOlivier GrégoireView Answer on Stackoverflow
Solution 7 - JavaBency BabyView Answer on Stackoverflow
Solution 8 - JavaErdi İzgiView Answer on Stackoverflow
Solution 9 - Javarobert_x44View Answer on Stackoverflow
Solution 10 - JavakaliatechView Answer on Stackoverflow
Solution 11 - JavaungalcrysView Answer on Stackoverflow
Solution 12 - JavaCarlosView Answer on Stackoverflow
Solution 13 - JavaArne DeutschView Answer on Stackoverflow
Solution 14 - JavabragboyView Answer on Stackoverflow
Solution 15 - JavaFathah Rehman PView Answer on Stackoverflow
Solution 16 - JavaNabil_HView Answer on Stackoverflow
Solution 17 - JavaGicoView Answer on Stackoverflow
Solution 18 - JavaMikhail KorotkovView Answer on Stackoverflow
Solution 19 - JavaHeinerView Answer on Stackoverflow
Solution 20 - JavaDeianView Answer on Stackoverflow
Solution 21 - JavaKuguar6View Answer on Stackoverflow
Solution 22 - JavaTezraView Answer on Stackoverflow
Solution 23 - JavaGooglianView Answer on Stackoverflow
Solution 24 - JavamR_fr0gView Answer on Stackoverflow