如何将Int转换为给定长度的String,并使用前导零对齐?

Iva*_*van 82 string int formatting scala

如何将长度转换Int为7个字符String,以便123转换为"0000123"

huy*_*hjl 201

Java库具有非常好的(如优秀的)数字格式支持,可从StringOps丰富的String类访问:

scala> "%07d".format(123)
res5: String = 0000123

scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Run Code Online (Sandbox Code Playgroud)

编辑后期Scala 2.10:正如fommil所建议的,从2.10开始,还有一个格式化字符串插值器(不支持本地化):

val expr = 123
f"$expr%07d"
f"${expr}%07d"
Run Code Online (Sandbox Code Playgroud)

  • 你不需要这么明确,你可以写`f'$ a%07d"`(如果你在范围内有`val` /`var``a`). (8认同)
  • Ben,dhg,感谢你们的赞成,你们这些人都是一群人!我想我们仍然可以从其他答案中学到一些东西,而投票系统会考虑哪些答案是相关的. (6认同)

Pab*_*dez 33

简短回答:

"1234".reverse.padTo(7, '0').reverse
Run Code Online (Sandbox Code Playgroud)

答案很长:

Scala StringOps(包含Scala字符串对象因隐式转换而拥有的一组很好的方法)有一个padTo方法,它会在字符串中附加一定数量的字符.例如:

"aloha".padTo(10,'a')
Run Code Online (Sandbox Code Playgroud)

将返回"alohaaaaaa".请注意,String的元素类型是Char,因此单引号围绕着'a'.

你的问题是有点不同的,因为你需要预先考虑,而不是字符追加它们.这就是为什么你需要反转字符串,附加填充字符(因为字符串被反转,你现在将它们预先添加),然后再次反转整个事件以获得最终结果.

希望这可以帮助!

  • 使用.mkString返回一个字符串 (13认同)
  • 或使用字符'a' (2认同)

小智 27

padding是由表示%02d0被前缀以使长度2:

scala> val i = 9 
i: Int = 9

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

scala> println(paddedVal)             
09
Run Code Online (Sandbox Code Playgroud)


Lui*_*hys 9

huynhjl打败了我正确的答案,所以这里是另一种选择:

"0000000" + 123 takeRight 7
Run Code Online (Sandbox Code Playgroud)


zer*_*mem 5

def leftPad(s: String, len: Int, elem: Char): String = {
 elem.toString * (len - s.length()) + s
}
Run Code Online (Sandbox Code Playgroud)