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?
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?
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);
}
}
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.)
StringUtils.leftPad(yourString, 8, '0');
This is from commons-lang. See javadoc
This is what he was really asking for I believe:
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
output:
000Apple
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")
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.
String input = "Apple";
StringBuffer buf = new StringBuffer(input);
while (buf.length() < 8) {
buf.insert(0, '0');
}
String output = buf.toString();
You can use:
String.format("%08d", "Apple");
It seems to be the simplest method and there is no need of any external library.
Use Apache Commons StringUtils.leftPad (or look at the code to make your own function).
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 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 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;
}
}
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;
}
}
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
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;
}
}