Voici la chaîne, par exemple:
"Apple"
et je voudrais ajouter zéro pour remplir 8 caractères:
"000Apple"
Comment puis-je le faire?
Si vous devez le faire sans l'aide d'une bibliothèque:
("00000000" + "Apple").substring("Apple".length())
(Fonctionne tant que votre chaîne ne dépasse pas 8 caractères.)
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');
C'est de commons-lang . Voir javadoc
Voici ce qu'il demandait vraiment, je crois:
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
sortie:
000Apple
Vous pouvez utiliser la méthode String.format utilisée dans une autre réponse pour générer une chaîne de 0,
String.format("%0"+length+"d",0)
Ceci peut être appliqué à votre problème en ajustant dynamiquement le nombre de 0 premiers dans une chaîne de 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);
}
C'est toujours une solution en désordre, mais 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 Strings
de Guava:
Strings.padStart("Apple", 8, '0');
Vous pouvez utiliser ceci:
org.Apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
J'ai été dans une situation similaire et je l'ai utilisé; C'est assez concis et vous n'avez pas à vous soucier de la longueur ou d'une autre bibliothèque.
String str = String.format("%8s","Apple");
str = str.replace(' ','0');
Simple et soigné. Le format de chaîne retourne " Apple"
afin qu'après le remplacement de l'espace par des zéros, il donne le résultat souhaité.
String input = "Apple";
StringBuffer buf = new StringBuffer(input);
while (buf.length() < 8) {
buf.insert(0, '0');
}
String output = buf.toString();
Utilisez Apache Commons StringUtils.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(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 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);
}
}
Voici la version simple "script lisible" sans API que j'utilise pour pré-remplir une chaîne. (Simple, lisible et ajustable).
while(str.length() < desired_length)
str = '0'+str;
C'est rapide et fonctionne pour n'importe quelle longueur.
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);
}
Peut être plus rapide que Réponse de Chris Lercher lorsque la plupart des chaînes ont exactement 8 caractères
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
dans mon cas sur ma machine 1/8 plus vite.
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;
}
}
Quelqu'un at-il essayé cette solution Java pure (sans 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");
Malheureusement, cette solution ne fonctionne que si vous n'avez pas d'espaces vides dans une chaîne.
En Java:
String zeroes="00000000";
String Apple="Apple";
String result=zeroes.substring(Apple.length(),zeroes.length())+Apple;
En Scala:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
Vous pouvez également explorer un moyen dans Java 8 de le faire en utilisant des flux et une réduction (similaire à celle que j'ai faite avec Scala). C'est un peu différent de toutes les autres solutions et je l'aime particulièrement.