Comment convertir un Int en Ssortingng d’une longueur donnée avec des zéros à aligner?

Comment puis-je convertir une Int en une Ssortingng 7 caractères, de sorte que 123 soit transformé en "0000123" ?

La librairie Java supporte assez bien le formatage des nombres (comme en excellent), accessible depuis la classe Ssortingng enrichie par SsortingngOps :

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

Edit post Scala 2.10 : comme suggéré par fommil, à partir de 2.10, il y a aussi un interpolateur de chaîne de formatage:

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

Réponse courte:

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

Longue réponse:

Scala SsortingngOps (qui contient un bel ensemble de méthodes que les objects de chaîne Scala utilisent à cause des conversions implicites) possède une méthode padTo , qui ajoute un certain nombre de caractères à votre chaîne. Par exemple:

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

Renverra “alohaaaaaa” (en fait il renverra un vecteur mais ce n’est pas important pour ce cas).

Votre problème est un peu différent car vous devez append des caractères au lieu de les append . C’est pourquoi vous devez inverser la chaîne, append les caractères de remplissage (vous les préfixez 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!

Le padding est noté %02d pour que 0 soit préfixé pour faire la longueur 2 :

 scala> val i = 9 i: Int = 9 scala> val paddedVal = f"${num}%02d" paddedVal: Ssortingng = 09 scala> println(paddedVal) 09 

huynhjl m’a battu à la bonne réponse, alors voici une alternative:

 "0000000" + 123 takeRight 7 

Au cas où ce questionnaire deviendrait le recueil canonique,

 scala> import java.text._ import java.text._ scala> NumberFormat.getIntegerInstance.asInstanceOf[DecimalFormat] res0: java.text.DecimalFormat = java.text.DecimalFormat@674dc scala> .applyPattern("0000000") scala> res0.format(123) res2: Ssortingng = 0000123 

Avez-vous besoin de traiter des nombres négatifs? Sinon, je ferais juste

 def str(i: Int) = (i % 10000000 + 10000000).toSsortingng.subssortingng(1) 

ou

 def str(i: Int) = { val f = "000000" + i; f.subssortingng(f.length() - 7) } 

Sinon, vous pouvez utiliser NumberFormat :

 val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US) nf.setMinimumIntegerDigits(7) nf.setGroupingUsed(false) nf.format(-123) 
 def leftPad(s: Ssortingng, len: Int, elem: Char): Ssortingng = { elem.toSsortingng * (len - s.length()) + s }