如何将Int
转换为7个字符长String
,以便将123
转换为"0000123"
?
答案 0 :(得分:191)
Java库非常好(如优秀)number formatting support,可从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")
答案 1 :(得分:29)
简答:
"1234".reverse.padTo(7, '0').reverse
答案很长:
Scala StringOps(包含Scala字符串对象因隐式转换而拥有的一组很好的方法)有一个padTo
方法,它会在字符串中附加一定数量的字符。例如:
"aloha".padTo(10,'a')
将返回“alohaaaaaa”。请注意,String的元素类型是Char,因此单引号围绕'a'
。
您的问题有点不同,因为您需要 prepend 字符而非追加字符。这就是为什么你需要反转字符串,附加填充字符(因为字符串被颠倒,你现在将它们预先添加),然后再反转整个字符以获得最终结果。
希望这有帮助!
答案 2 :(得分:21)
padding
%02d
表示0
2
为前缀scala> val i = 9
i: Int = 9
scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09
scala> println(paddedVal)
09
:
{{1}}
答案 3 :(得分:9)
huynhjl打败了我正确的答案,所以这里有另一种选择:
"0000000" + 123 takeRight 7
答案 4 :(得分:2)
def leftPad(s: String, len: Int, elem: Char): String = {
elem.toString * (len - s.length()) + s
}
答案 5 :(得分:1)
你需要处理负数吗?如果没有,我会做
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)
答案 6 :(得分:1)
如果这个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