繁体   English   中英

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

[英]How to convert an Int to a String of a given length with leading zeros to align?

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

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")

简短答案:

"1234".reverse.padTo(7, '0').reverse

长答案:

Scala StringOps (包含Scala字符串对象由于隐式转换而具有的一组padTo方法)具有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

huynhjl为我打了个正确的答案,所以这里有一个替代方法:

"0000000" + 123 takeRight 7
def leftPad(s: String, len: Int, elem: Char): String = {
 elem.toString * (len - s.length()) + s
}

如果此问与答成为规范汇编,

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)

对于字符串使用:

def completeTo10Digits(entity: String): String = {
    val zerosToAdd = (1 to (10 - entity.length)).map(_ => "0").mkString
    zerosToAdd + entity
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM