Existe-t-il un moyen simple de rembourrer des chaînes de caractères en Java ?
Cela semble être quelque chose qui devrait se trouver dans une API de type StringUtil, mais je ne trouve rien qui fasse cela.
Existe-t-il un moyen simple de rembourrer des chaînes de caractères en Java ?
Cela semble être quelque chose qui devrait se trouver dans une API de type StringUtil, mais je ne trouve rien qui fasse cela.
Depuis Java 1.5, String.format()
peut être utilisé pour remplacer une chaîne de caractères par une chaîne de caractères gauche/droite.
public static String padRight(String s, int n) {
return String.format("%-" + n + "s", s);
}
public static String padLeft(String s, int n) {
return String.format("%" + n + "s", s);
}
...
public static void main(String args[]) throws Exception {
System.out.println(padRight("Howto", 20) + "*");
System.out.println(padLeft("Howto", 20) + "*");
}
Et le résultat est :
Howto *
Howto*
Et si vous avez besoin de lpad avec d'autres caractères (pas des espaces) ? Est-ce encore possible avec String.format ? Je n'arrive pas à le faire fonctionner...
AFAIK String.format() ne peut pas le faire mais il n'est pas trop difficile de le coder, cf. rgagnon.com/javadetails/java-0448.html (2ème exemple)
@Nullw0rm, si vous faites référence à rgagnon.com, sachez que RealHowTo est l'auteur de rgagnon.com aussi, donc il s'attribuerait le mérite...
Rembourrage jusqu'à 10 caractères :
String.format("%10s", "foo").replace(' ', '*');
String.format("%-10s", "bar").replace(' ', '*');
String.format("%10s", "longer than 10 chars").replace(' ', '*');
sortie :
*******foo
bar*******
longer*than*10*chars
Afficher '*' pour les caractères du mot de passe :
String password = "secret123";
String padded = String.format("%"+password.length()+"s", "").replace(' ', '*');
La sortie a la même longueur que la chaîne de mots de passe :
secret123
*********
Tant que nous nous souvenons tous de ne pas passer dans une chaîne de caractères avec des espaces... :D
Je suis avec @aboveyou00 - c'est une solution horrible pour les chaînes avec des espaces, y compris l'exemple fourni par leo. Une solution de remplissage d'une chaîne à gauche ou à droite ne devrait pas modifier la chaîne d'entrée telle qu'elle apparaît dans la sortie, à moins que le remplissage original de la chaîne d'entrée ne la fasse dépasser la longueur de remplissage spécifiée.
Reconnaissez le problème de l'espace. .replace(' ', '*')
était plutôt destiné à montrer l'effet du rembourrage. L'expression "cacher le mot de passe" n'a pas ce problème de toute façon... Pour une meilleure réponse sur la personnalisation des chaînes de remplissage gauche et droite à l'aide d'une fonctionnalité Java native, voir mon autre réponse.
Apache StringUtils
a plusieurs méthodes : leftPad
, rightPad
, center
y repeat
.
Mais notez bien que - comme d'autres l'ont mentionné et démontré en cette réponse - String.format()
et le Formatter
dans le JDK sont de meilleures options. Utilisez-les plutôt que le code commun.
Java.util.Formatter (et String.format()) fait cela. Il faut toujours préférer le JDK à une bibliothèque externe si la version du JDK fait le travail (ce qui est le cas).
Pour plusieurs raisons, je préfère maintenant Guava à Apache Commons ; cette réponse montre comment le faire en Guava .
En Goyave c'est facile :
Strings.padStart("string", 10, ' ');
Strings.padEnd("string", 10, ' ');
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.