如何将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)