如何将Int转换为给定长度的string,并将前导零alignment?
如何将一个Int
转换为一个长度为7个字符的String
,使123
变成"0000123"
?
Java库具有非常好的(如出色的) 数字格式支持 ,可以从StringOps丰富的String类访问:
scala> "%07d".format(123) res5: String = 0000123 scala> "%07d".formatLocal(java.util.Locale.US, 123) res6: String = 0000123
编辑postScala 2.10 :从2.10开始,如fommil所示,还有一个格式化string插入器:
val expr = 123 f"$expr%07d" f"${expr}%07d"
简短的回答:
"1234".reverse.padTo(7, "0").reverse.toString
很长的回答:
Scala StringOps (包含一组由Scalastring对象具有隐式转换的padTo
方法)有一个padTo
方法,它将一定数量的字符附加到string中。 例如:
"aloha".padTo(10,"a")
将返回“alohaaaaaa”(实际上它将返回一个向量,但这不是重要的这种情况下)。
你的问题有点不同,因为你需要预先加上字符而不是附加它们。 这就是为什么你需要扭转string,追加填充字符(因为string被反转,所以你现在预先把它们加上去),然后再把整个事情颠倒过来,以得到最终的结果。
希望这可以帮助!
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打我的正确答案,所以这是一个替代scheme:
"0000000" + 123 takeRight 7
如果这个问答成为规范纲要,
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
你需要处理负数吗? 如果不是的话,我会做
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)