Comment formater une chaîne Java avec un zéro non significatif?

Voici la chaîne, par exemple:

"Apple" 

et je voudrais append zéro pour remplir 8 caractères:

 "000Apple" 

Comment puis-je le faire?

Au cas où vous deviez le faire sans l’aide d’une bibliothèque:

 ("00000000" + "Apple").subssortingng("Apple".length()) 

(Fonctionne, tant que votre chaîne ne dépasse pas 8 caractères)

 public class LeadingZerosExample { public static void main(Ssortingng[] args) { int number = 1500; // Ssortingng format below will add leading zeros (the %0 syntax) // to the number above. // The length of the formatted ssortingng will be 7 characters. Ssortingng formatted = Ssortingng.format("%07d", number); System.out.println("Number with leading zeros: " + formatted); } } 
  SsortingngUtils.leftPad(yourSsortingng, 8, '0'); 

Ceci vient de commons-lang . Voir javadoc

C’est ce qu’il demandait vraiment, je crois:

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

sortie:

 000Apple 

Vous pouvez utiliser la méthode Ssortingng.format utilisée dans une autre réponse pour générer une chaîne de 0,

 Ssortingng.format("%0"+length+"d",0) 

Cela peut être appliqué à votre problème en ajustant dynamicment le nombre de 0 initiaux dans une chaîne de format:

 public Ssortingng leadingZeros(Ssortingng s, int length) { if (s.length() >= length) return s; else return Ssortingng.format("%0" + (length-s.length()) + "d%s", 0, s); } 

C’est toujours une solution désordonnée, mais elle présente l’avantage de pouvoir spécifier la longueur totale de la chaîne résultante à l’aide d’un argument entier.

Utilisation de la classe d’utilitaire Guava’s Ssortingngs :

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

Vous pouvez utiliser ceci:

 org.apache.commons.lang.SsortingngUtils.leftPad("Apple", 8, "0") 
 Ssortingng input = "Apple"; SsortingngBuffer buf = new SsortingngBuffer(input); while (buf.length() < 8) { buf.insert(0, '0'); } String output = buf.toString(); 

J’ai été dans une situation similaire et j’ai utilisé ceci; C’est assez concis et vous n’avez pas à traiter avec la longueur ou une autre bibliothèque.

 Ssortingng str = Ssortingng.format("%8s","Apple"); str = str.replace(' ','0'); 

Simple et soigné. Le format de chaîne renvoie " Apple" . Après avoir remplacé l’espace par des zéros, cela donne le résultat souhaité.

Utilisez Apache Commons SsortingngUtils.leftPad (ou regardez le code pour créer votre propre fonction).

Vous devrez peut-être prendre soin d’edgecase. Ceci est une méthode générique.

 public class Test { public static void main(Ssortingng[] args){ System.out.println(padCharacter("0",8,"hello")); } public static Ssortingng padCharacter(Ssortingng c, int num, Ssortingng str){ for(int i=0;i<=num-str.length()+1;i++){str = c+str;} return str; } } 
 public class PaddingLeft { public static void main(Ssortingng[] args) { Ssortingng input = "Apple"; Ssortingng result = "00000000" + input; int length = result.length(); result = result.subssortingng(length - 8, length); System.out.println(result); } } 
 public static void main(Ssortingng[] args) { Ssortingng ssortingngForTest = "Apple"; int requiredLengthAfterPadding = 8; int inputSsortingngLengh = ssortingngForTest.length(); int diff = requiredLengthAfterPadding - inputSsortingngLengh; if (inputSsortingngLengh < requiredLengthAfterPadding) { stringForTest = new String(new char[diff]).replace("\0", "0")+ stringForTest; } System.out.println(stringForTest); } 

C’est rapide et fonctionne quelle que soit la longueur.

 public static Ssortingng prefixZeros(Ssortingng value, int len) { char[] t = new char[len]; int l = value.length(); int k = len-l; for(int i=0;i 

Peut être plus rapide que Chris Lercher répondra quand la plupart de

 int length = in.length(); return length == 8 ? in : ("00000000" + in).subssortingng(length); 

dans mon cas sur ma machine 1/8 plus vite.

Voici la version simple “script lisible” sans API que j’utilise pour pré-remplir une chaîne. (Simple, lisible et réglable).

 while(str.length() < desired_length) str = '0'+str; 
 public static Ssortingng lpad(Ssortingng str, int requiredLength, char padChar) { if (str.length() > requiredLength) { return str; } else { return new Ssortingng(new char[requiredLength - str.length()]).replace('\0', padChar) + str; } } 

Ce n’est pas joli, mais ça marche. Si vous avez access à apache commons je suggère que cette utilisation

 if (val.length() < 8) { for (int i = 0; i < val - 8; i++) { val = "0" + val; } }