How can I pad an integer with zeros on the left?

JavaFormattingZero Pad

Java Problem Overview


How do you left pad an int with zeros when converting to a String in java?

I'm basically looking to pad out integers up to 9999 with leading zeros (e.g. 1 = 0001).

Java Solutions


Solution 1 - Java

Use java.lang.String.format(String,Object...) like this:

String.format("%05d", yournumber);

for zero-padding with a length of 5. For hexadecimal output replace the d with an x as in "%05x".

The full formatting options are documented as part of java.util.Formatter.

Solution 2 - Java

Let's say you want to print 11 as 011

You could use a formatter: "%03d".

enter image description here

You can use this formatter like this:

int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);

Alternatively, some java methods directly support these formatters:

System.out.printf("%03d", a);

Solution 3 - Java

If you for any reason use pre 1.5 Java then may try with Apache Commons Lang method

org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')

Solution 4 - Java

Found this example... Will test...

import java.text.DecimalFormat;
class TestingAndQualityAssuranceDepartment
{
    public static void main(String [] args)
    {
        int x=1;
        DecimalFormat df = new DecimalFormat("00");
        System.out.println(df.format(x));
    }
}

Tested this and:

String.format("%05d",number);

Both work, for my purposes I think String.Format is better and more succinct.

Solution 5 - Java

Try this one:

import java.text.DecimalFormat; 

DecimalFormat df = new DecimalFormat("0000");

String c = df.format(9);   // Output: 0009

String a = df.format(99);  // Output: 0099

String b = df.format(999); // Output: 0999

Solution 6 - Java

If performance is important in your case you could do it yourself with less overhead compared to the String.format function:

/**
 * @param in The integer value
 * @param fill The number of digits to fill
 * @return The given value left padded with the given number of digits
 */
public static String lPadZero(int in, int fill){
	
	boolean negative = false;
	int value, len = 0;
			
	if(in >= 0){
		value = in;
	} else {
		negative = true;
		value = - in;
		in = - in;
		len ++;
	}
	
	if(value == 0){
		len = 1;
	} else{			
		for(; value != 0; len ++){
			value /= 10;
		}
	}
	
	StringBuilder sb = new StringBuilder();
	
	if(negative){
		sb.append('-');
	}
	
	for(int i = fill; i > len; i--){
		sb.append('0');
	}
	
	sb.append(in);
	
	return sb.toString();		
}

Performance

public static void main(String[] args) {
	Random rdm;
	long start; 
	
	// Using own function
	rdm = new Random(0);
	start = System.nanoTime();
	
	for(int i = 10000000; i != 0; i--){
		lPadZero(rdm.nextInt(20000) - 10000, 4);
	}
	System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms");
	
	// Using String.format
	rdm = new Random(0);		
	start = System.nanoTime();
	
	for(int i = 10000000; i != 0; i--){
		String.format("%04d", rdm.nextInt(20000) - 10000);
	}
	System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}

Result

Own function: 1697ms

String.format: 38134ms

Solution 7 - Java

You can use Google Guava:

Maven:

<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>

Sample code:

String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"

Note:

Guava is very useful library, it also provides lots of features which related to Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, etc

Ref: GuavaExplained

Solution 8 - Java

Here is how you can format your string without using DecimalFormat.

String.format("%02d", 9)

> 09

String.format("%03d", 19)

> 019

String.format("%04d", 119)

> 0119

Solution 9 - Java

Although many of the above approaches are good, but sometimes we need to format integers as well as floats. We can use this, particularly when we need to pad particular number of zeroes on left as well as right of decimal numbers.

import java.text.NumberFormat;  
public class NumberFormatMain {  

public static void main(String[] args) {  
    int intNumber = 25;  
    float floatNumber = 25.546f;  
    NumberFormat format=NumberFormat.getInstance();  
    format.setMaximumIntegerDigits(6);  
    format.setMaximumFractionDigits(6);  
    format.setMinimumFractionDigits(6);  
    format.setMinimumIntegerDigits(6);  

    System.out.println("Formatted Integer : "+format.format(intNumber).replace(",",""));  
    System.out.println("Formatted Float   : "+format.format(floatNumber).replace(",",""));  
 }    
}  

Solution 10 - Java

int x = 1;
System.out.format("%05d",x);

if you want to print the formatted text directly onto the screen.

Solution 11 - Java

You need to use a Formatter, following code uses NumberFormat

	int inputNo = 1;
	NumberFormat nf = NumberFormat.getInstance();
	nf.setMaximumIntegerDigits(4);
	nf.setMinimumIntegerDigits(4);
	nf.setGroupingUsed(false);
	
	System.out.println("Formatted Integer : " + nf.format(inputNo));

> Output: 0001

Solution 12 - Java

Use the class DecimalFormat, like so:

NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811)); 

OUTPUT : 0000811

Solution 13 - Java

You can add leading 0 to your string like this. Define a string that will be the maximum length of the string that you want. In my case i need a string that will be only 9 char long.

String d = "602939";
d = "000000000".substring(0, (9-d.length())) + d;
System.out.println(d);

Output : 000602939

Solution 14 - Java

Check my code that will work for integer and String.

Assume our first number is 2. And we want to add zeros to that so the the length of final string will be 4. For that you can use following code

    int number=2;
    int requiredLengthAfterPadding=4;
    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);

Solution 15 - Java

Use this simple extension function

fun Int.padZero(): String {
    return if (this < 10) {
        "0$this"
    } else {
        this.toString()
    }
}

Solution 16 - Java

For Kotlin

fun Calendar.getFullDate(): String {
    val mYear = "${this.get(Calendar.YEAR)}-"
    val mMonth = if (this.get(Calendar.MONTH) + 1 < 10) {
        "0${this.get(Calendar.MONTH) + 1}-"
    } else {
        "${this.get(Calendar.MONTH)+ 1}-"
    }
    val mDate = if (this.get(Calendar.DAY_OF_MONTH)  < 10) {
        "0${this.get(Calendar.DAY_OF_MONTH)}"
    } else {
        "${this.get(Calendar.DAY_OF_MONTH)}"
    }
    return mYear + mMonth + mDate
}

and use it as

val date: String = calendar.getFullDate()

Solution 17 - Java

Here is another way to pad an integer with zeros on the left. You can increase the number of zeros as per your convenience. Have added a check to return the same value as is in case of negative number or a value greater than or equals to zeros configured. You can further modify as per your requirement.

/**
 * 
 * @author Dinesh.Lomte
 *
 */
public class AddLeadingZerosToNum {
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		
		System.out.println(getLeadingZerosToNum(0));
		System.out.println(getLeadingZerosToNum(7));
		System.out.println(getLeadingZerosToNum(13));
		System.out.println(getLeadingZerosToNum(713));
		System.out.println(getLeadingZerosToNum(7013));
		System.out.println(getLeadingZerosToNum(9999));
	}
	/**
	 * 
	 * @param num
	 * @return
	 */
	private static String getLeadingZerosToNum(int num) {
		// Initializing the string of zeros with required size
		String zeros = new String("0000");
		// Validating if num value is less then zero or if the length of number 
		// is greater then zeros configured to return the num value as is
		if (num < 0 || String.valueOf(num).length() >= zeros.length()) {
			return String.valueOf(num);
		}
		// Returning zeros in case if value is zero.
		if (num == 0) {
			return zeros;
		}
		return new StringBuilder(zeros.substring(0, zeros.length() - 
				String.valueOf(num).length())).append(
						String.valueOf(num)).toString();
	}
}

Input

0

7

13

713

7013

9999

Output

0000

0007

0013

7013

9999

Solution 18 - Java

No packages needed:

String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;

This will pad the string to three characters, and it is easy to add a part more for four or five. I know this is not the perfect solution in any way (especially if you want a large padded string), but I like it.

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
QuestionOmar KoohejiView Question on Stackoverflow
Solution 1 - JavaYoni RoitView Answer on Stackoverflow
Solution 2 - JavabvdbView Answer on Stackoverflow
Solution 3 - JavaBoris PavlovićView Answer on Stackoverflow
Solution 4 - JavaOmar KoohejiView Answer on Stackoverflow
Solution 5 - JavaBrijesh PatelView Answer on Stackoverflow
Solution 6 - Javadas KeksView Answer on Stackoverflow
Solution 7 - JavaThoView Answer on Stackoverflow
Solution 8 - JavaMorgan KohView Answer on Stackoverflow
Solution 9 - JavaDeepakView Answer on Stackoverflow
Solution 10 - JavaShashiView Answer on Stackoverflow
Solution 11 - JavaJobinView Answer on Stackoverflow
Solution 12 - JavaShomuView Answer on Stackoverflow
Solution 13 - JavaPirateView Answer on Stackoverflow
Solution 14 - JavaFathah Rehman PView Answer on Stackoverflow
Solution 15 - JavaDr AdamsView Answer on Stackoverflow
Solution 16 - JavaHaseeb Hassan AsifView Answer on Stackoverflow
Solution 17 - JavaDinesh LomteView Answer on Stackoverflow
Solution 18 - JavaNoShadowKickView Answer on Stackoverflow