回答:
Javaライブラリーは、(優れた)かなり良い数値フォーマットのサポートを備えており、StringOpsの強化されたStringクラスからアクセスできます。
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Scala 2.10の投稿を編集:2.10以降、fommilによって提案されたように、フォーマット文字列補間機能もあります(ローカライズをサポートしていません):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
2019年4月を編集:
0
は、フォーマット指定子からを省略してください。上記の場合、f"$expr%7d"
2.12.8 REPL でテストされます。コメントで提案されているように文字列置換を行う必要はなく7
、別のコメントで提案されているように前に明示的なスペースを置く必要もありません。s"%${len}d".format("123")
f"$a%07d"
がある場合)書くことができます。val
var
a
"% 7d".format(123)
短い答え:
"1234".reverse.padTo(7, '0').reverse
長い答え:
Scala StringOps(暗黙的な変換のためにScala文字列オブジェクトが持つ一連の優れたメソッドが含まれています)には、padTo
文字列に特定の量の文字を追加するメソッドがあります。例えば:
"aloha".padTo(10,'a')
「alohaaaaaa」を返します。Stringの要素タイプはCharであるため、を囲む単一引用符に注意してください'a'
。
文字を付加するのではなく、前に付加する必要があるため、問題は少し異なります。そのため、文字列を逆にして、埋める文字を追加し(文字列が逆になっているので、今は前に付加します)、次に、全体をもう一度逆にして、最終的な結果を得る必要があります。
お役に立てれば!
padding
で表される%02d
ため0
長さを作るために前置させます2
。
scala> val i = 9
i: Int = 9
scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09
scala> println(paddedVal)
09
val paddedVal = f"${num}%02d"
で変更num
する必要がありますi
f"$num%02d"
(ここに括弧は必要ありません)
huynhjlが正しい答えに私を打ち負かしたので、ここに代替案があります:
"0000000" + 123 takeRight 7
"0000000" + Int.MaxValue takeRight 7
=> 7483647
。質問の文字通りの解釈によって「技術的に」正しくはありますが、数字がそれほど大きい場合、読者が埋め込み番号を7桁を超えて拡張したくないとは考えにくいでしょう。
負の数を処理する必要がありますか?そうでなければ、私はやるだろう
def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)
または
def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }
それ以外の場合は、次を使用できますNumberFormat
。
val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)