Answers:
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.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”。请注意,字符串的元素类型为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)