123 votes

Comment convertir un Int en une chaîne de caractères d'une longueur donnée avec des zéros en tête à aligner ?

Comment puis-je convertir un Int à une longueur de 7 caractères String de sorte que 123 est transformé en "0000123" ?

264voto

huynhjl Points 26045

La bibliothèque Java est plutôt bonne (comme dans excellent) prise en charge du formatage des numéros qui est accessible depuis StringOps classe String enrichie :

scala> "%07d".format(123)
res5: String = 0000123

scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123

Modifier l'article Scala 2.10 Comme suggéré par fommil, à partir de la version 2.10, il existe également un interpolateur de chaînes de formatage (qui ne prend pas en charge la localisation) :

val expr = 123
f"$expr%07d"
f"${expr}%07d"

Editer avril 2019 :

  • Si vous voulez des espaces de tête, et non des zéros, il suffit de ne pas utiliser l'élément 0 du spécificateur de format. Dans le cas ci-dessus, ce serait f"$expr%7d" Testé dans 2.12.8 REPL. Il n'est pas nécessaire d'effectuer le remplacement de la chaîne de caractères comme suggéré dans un commentaire, ni même de mettre un espace explicite devant 7 comme suggéré dans un autre commentaire.
  • Si la longueur est variable, s"%${len}d".format("123")

50voto

Pablo Fernandez Points 32003

Réponse courte :

"1234".reverse.padTo(7, '0').reverse

Longue réponse :

Scala StringOps (qui contient un bel ensemble de méthodes que les objets chaîne de Scala possèdent en raison des conversions implicites) possède un objet padTo qui ajoute un certain nombre de caractères à votre chaîne. Par exemple :

"aloha".padTo(10,'a')

renverra "alohaaaaaa". Notez que le type d'élément d'une chaîne est un Char, d'où les guillemets simples autour de l'élément 'a' .

Votre problème est un peu différent puisque vous devez Préparez au lieu des caractères ajout de les. C'est pourquoi vous devez inverser la chaîne, ajouter les caractères de remplissage (vous les ajouteriez maintenant puisque la chaîne est inversée), puis inverser à nouveau le tout pour obtenir le résultat final.

J'espère que cela vous aidera !

34voto

maxmithun Points 703

El padding est dénoté par %02d para 0 à préfixer pour rendre la longueur 2 :

scala> val i = 9 
i: Int = 9

scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09

scala> println(paddedVal)             
09

10voto

Luigi Plinge Points 23552

Huynhjl m'a devancé pour la bonne réponse, alors voici une alternative :

"0000000" + 123 takeRight 7

7voto

zeromem Points 129
def leftPad(s: String, len: Int, elem: Char): String = {
 elem.toString * (len - s.length()) + s
}

Prograide.com

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.

Powered by:

X