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 }