Aici este Șir de caractere, de exemplu:
"Apple"
și aș dori să adaug zero pentru a umple în 8 caractere:
"000Apple"
Cum pot face acest lucru?
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);
}
}
StringUtils.leftPad(yourString, 8, '0');
Acest lucru este de la commons-lang. Vezi javadoc
Puteți utiliza Șir.format metodă folosită într-un alt răspuns pentru a genera un șir de 0's,
String.format("%0"+length+"d",0)
Acest lucru poate fi aplicat la problema ta prin ajustarea dinamic numărul de lider 0's într-un șir format:
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);
}
L's încă un murdar soluție, dar are avantajul că puteți specifica lungimea totală de șirul rezultat folosind un întreg argument.
Folosind Guava's ["Siruri de caractere"] (http://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Strings.html) clasă de utilitate:
Strings.padStart("Apple", 8, '0');
Puteți folosi acest lucru:
org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
Am'am fost într-o situație similară și am folosit acest lucru; este destul de concis și don't au de a face cu o lungime sau o altă bibliotecă.
String str = String.format("%8s","Apple");
str = str.replace(' ','0');
Simplu și elegant. Șir format se întoarce `" Apple" așa după înlocuirea spațiu cu zerouri, se dă rezultatul dorit.
Tu ar trebui să aibă grijă de edgecase. Aceasta este o metodă generică.
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 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);
}
}
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);
}
În Java:
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
În Scala:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
Puteți explora, de asemenea, un mod în Java 8 se face folosind izvoare și de a reduce (similar cu modul în care am făcut-o cu Scala). L's un pic diferit de toate celelalte soluții și în special îmi place foarte mult.
Cineva a încercat acest lucru Java pur soluție (fără 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");
Din păcate această soluție funcționează numai dacă nu au spații goale într-un șir.
Acest lucru este rapid & lucrări de orice lungime.
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);
}
Poate fi mai rapid atunci Chris Lercher raspuns atunci când cele mai multe în Șir au exact 8 char
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
în cazul meu, la masina mea 1/8 mai repede.