Die Java-Bibliothek bietet eine ziemlich gute (wie auch hervorragende) Unterstützung für die Formatierung von Zahlen , auf die über die mit StringOps angereicherte String-Klasse zugegriffen werden kann :
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Beitrag bearbeiten Scala 2.10 : Wie von fommil vorgeschlagen, gibt es ab 2.10 auch einen Formatierungsstring-Interpolator (unterstützt keine Lokalisierung):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
Bearbeiten April 2019:
- Wenn Sie führende Leerzeichen und nicht Null möchten, lassen Sie
0
das Format einfach aus dem Formatbezeichner weg . Im obigen Fall wäre es f"$expr%7d"
.Test in 2.12.8 REPL. Sie müssen die Zeichenfolge nicht wie in einem Kommentar vorgeschlagen ersetzen oder ein explizites Leerzeichen vor 7
das in einem anderen Kommentar vorgeschlagene setzen.
- Wenn die Länge variabel ist,
s"%${len}d".format("123")
f"$a%07d"
(wenn Sie einenval
/var
a
in-Bereich haben).regex
string.replaceAll("\\G0", " ")
führende Nullen durch Leerzeichen ersetzen, wie hier angegeben"% 7d".format(123)
.Kurze Antwort:
Lange Antwort:
Scala StringOps (das eine Reihe von Methoden enthält, über die Scala-Zeichenfolgenobjekte aufgrund impliziter Konvertierungen verfügen) verfügt über eine
padTo
Methode, mit der eine bestimmte Anzahl von Zeichen an Ihre Zeichenfolge angehängt wird. Beispielsweise:Wird "alohaaaaaa" zurückgeben. Beachten Sie, dass der Elementtyp eines Strings ein Zeichen ist, daher die einfachen Anführungszeichen um das
'a'
.Ihr Problem ist etwas anders, da Sie Zeichen voranstellen müssen, anstatt sie anzuhängen . Aus diesem Grund müssen Sie die Zeichenfolge umkehren, die Füllzeichen anhängen (Sie würden sie jetzt voranstellen, da die Zeichenfolge umgekehrt ist) und dann das Ganze erneut umkehren, um das Endergebnis zu erhalten.
Hoffe das hilft!
quelle
Das
padding
wird mit bezeichnet, damit%02d
für0
die Länge ein Präfix vorangestellt wird2
:quelle
val paddedVal = f"${num}%02d"
solltenum
füri
f"$num%02d"
(hier sind keine Klammern erforderlich)huynhjl hat mich auf die richtige Antwort geschlagen, also hier eine Alternative:
quelle
"0000000" + Int.MaxValue takeRight 7
=>7483647
. Obwohl dies durch die wörtliche Interpretation der Frage "technisch" korrekt ist, ist es unwahrscheinlich, dass der Leser nicht möchte, dass die aufgefüllte Zahl über 7 Stellen hinausgeht, wenn die Zahl so groß ist.quelle
Falls diese Fragen und Antworten zum kanonischen Kompendium werden,
quelle
Müssen Sie mit negativen Zahlen umgehen? Wenn nicht, würde ich es einfach tun
oder
Andernfalls können Sie Folgendes verwenden
NumberFormat
:quelle