123
を"0000123"
に変換するために、Int
を7文字のString
に変換するにはどうすればよいですか?
Javaライブラリは非常に優れています(優れているように) 数値フォーマットのサポートStringOps 強化されたStringクラスからアクセス可能です):
_scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(Java.util.Locale.US, 123)
res6: String = 0000123
_
投稿の編集Scala 2.10:fommilによって示唆されているように、2.10以降、フォーマット文字列補間機能もあります(ローカライズをサポートしません):
_val expr = 123
f"$expr%07d"
f"${expr}%07d"
_
2019年4月編集:
0
_を省略します。上記の場合、それは_f"$expr%7d"
_になります。2.12.8REPLでテスト済みです。コメントで提案されているように文字列の置換を行う必要はありません。また、別のコメントで提案されているように_7
_の前に明示的なスペースを置く必要もありません。s"%${len}d".format("123")
短い答え:
"1234".reverse.padTo(7, '0').reverse
長答:
Scala StringOps (Scala暗黙の変換のために文字列オブジェクトが持つメソッドの素敵なセットを含む)には、特定の量を追加するpadTo
メソッドがあります文字列への文字の例:例:
"aloha".padTo(10,'a')
「alohaaaaaa」を返します。 Stringの要素タイプはCharであるため、'a'
を囲む単一引用符に注意してください。
appendingの代わりにprepend文字を追加する必要があるため、問題は少し異なります)それら。そのため、文字列を反転し、フィルアップ文字を追加し(文字列が反転しているため、文字列を先頭に追加します)、最後の結果を得るために全体を再度反転する必要があります。
お役に立てれば!
padding
は、%02d
で示され、0
の長さが2
になるように接頭辞が付けられます。
scala> val i = 9
i: Int = 9
scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09
scala> println(paddedVal)
09
huynhjlは私を正しい答えに打ち負かしたので、ここに代替案があります:
"0000000" + 123 takeRight 7
def leftPad(s: String, len: Int, elem: Char): String = {
elem.toString * (len - s.length()) + s
}
負の数に対処する必要がありますか?そうでなければ、私はただやる
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)
このQ&Aが標準的な大要になる場合、
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: String = 0000123