web-dev-qa-db-ja.com

Intを指定された長さの文字列に変換する方法

123"0000123"に変換するために、Intを7文字のStringに変換するにはどうすればよいですか?

81
Ivan

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")
196
huynhjl

短い答え:

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

長答:

Scala StringOps (Scala暗黙の変換のために文字列オブジェクトが持つメソッドの素敵なセットを含む)には、特定の量を追加するpadToメソッドがあります文字列への文字の例:例:

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

「alohaaaaaa」を返します。 Stringの要素タイプはCharであるため、'a'を囲む単一引用符に注意してください。

appendingの代わりにprepend文字を追加する必要があるため、問題は少し異なります)それら。そのため、文字列を反転し、フィルアップ文字を追加し(文字列が反転しているため、文字列を先頭に追加します)、最後の結果を得るために全体を再度反転する必要があります。

お役に立てれば!

31
Pablo Fernandez

paddingは、%02dで示され、0の長さが2になるように接頭辞が付けられます。

scala> val i = 9 
i: Int = 9

scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09

scala> println(paddedVal)             
09
24
maxmithun

huynhjlは私を正しい答えに打ち負かしたので、ここに代替案があります:

"0000000" + 123 takeRight 7
def leftPad(s: String, len: Int, elem: Char): String = {
 elem.toString * (len - s.length()) + s
}
2
zeromem

負の数に対処する必要がありますか?そうでなければ、私はただやる

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)
1
0__

この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
1
som-snytt