How to format a Java string with leading zero?
JavaStringFormattingFormatJava 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
StringUtils.leftPad(yourString, 8, '0');
This is from commons-lang. https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#leftPad-java.lang.String-int-char-">See javadoc
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;
}
}