La bibliothèque Java a une assez bonne prise en charge (comme en excellent) du formatage des nombres qui est accessible à partir de la classe String enrichie par StringOps :
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Edit post Scala 2.10 : comme suggéré par fommil, à partir de 2.10, il existe également un interpolateur de chaîne de formatage (ne prend pas en charge la localisation):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
Modifier avril 2019:
- Si vous voulez des espaces de début, et non zéro, laissez simplement le
0
dans le spécificateur de format. Dans le cas ci-dessus, il serait f"$expr%7d"
.Testé dans 2.12.8 REPL. Pas besoin de faire le remplacement de chaîne 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")
f"$a%07d"
(si vous avez unval
/var
a
dans la portée).regex
string.replaceAll("\\G0", " ")
"% 7d".format(123)
.Réponse courte:
Longue réponse:
Scala StringOps (qui contient un bel ensemble de méthodes que les objets de chaîne Scala ont en raison de conversions implicites) a une
padTo
méthode, qui ajoute un certain nombre de caractères à votre chaîne. Par exemple:Reviendra "alohaaaaaa". Notez que le type d'élément d'une chaîne est un Char, d'où les guillemets simples autour du
'a'
.Votre problème est un autre bit puisque vous devez préfixer caractères au lieu de annexant eux. 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 le tout pour obtenir le résultat final.
J'espère que cela t'aides!
la source
Le
padding
est désigné par%02d
for0
pour être préfixé pour faire la longueur2
:la source
val paddedVal = f"${num}%02d"
devrait être changénum
pouri
f"$num%02d"
(pas de parenthèses nécessaires ici)huynhjl m'a battu à la bonne réponse, alors voici une alternative:
la source
"0000000" + Int.MaxValue takeRight 7
=>7483647
. Bien que "techniquement" correcte par l'interprétation littérale de la question, il est peu probable que le lecteur ne veuille pas que le nombre complété s'étende au-delà de 7 chiffres si le nombre est aussi grand.la source
Au cas où ce Q&A deviendrait le recueil canonique,
la source
Avez-vous besoin de gérer des nombres négatifs? Sinon, je ferais juste
ou
Sinon, vous pouvez utiliser
NumberFormat
:la source