当前位置: 动力学知识库 > 问答 > 编程问答 >

scala - How to convert an Int to a String of a given length with leading zeros to align?

问题描述:

How can I convert an Int to a 7-character long String, so that 123 is turned into "0000123"?

网友答案:

The Java library has pretty good (as in excellent) number formatting support which is accessible from StringOps enriched String class:

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

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

Edit post Scala 2.10: as suggested by fommil, from 2.10 on, there is also a formatting string interpolator:

val expr = 123
f"$expr%07d"
f"${expr}%07d"
网友答案:

Short answer:

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

Long answer:

Scala StringOps (which contains a nice set of methods that Scala string objects have because of implicit conversions) has a padTo method, which appends a certain amount of characters to your string. For example:

"aloha".padTo(10,"a")

Will return "alohaaaaaa" (actually it will return a Vector but it's not important for this case).

Your problem is a bit different since you need to prepend characters instead of appending them. That's why you need to reverse the string, append the fill-up characters (you would be prepending them now since the string is reversed), and then reverse the whole thing again to get the final result.

Hope this helps!

网友答案:

huynhjl beat me to the right answer, so here's an alternative:

"0000000" + 123 takeRight 7
网友答案:

The padding is denoted by %02d for 0 to be prefixed to make the length 2:

scala> val i = 9 
i: Int = 9

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

scala> println(paddedVal)             
09
网友答案:

In case this Q&A becomes the canonical compendium,

scala> import java.text._
import java.text._

scala> NumberFormat.getIntegerInstance.asInstanceOf[DecimalFormat]
res0: java.text.DecimalFormat = [email protected]

scala> .applyPattern("0000000")

scala> res0.format(123)
res2: String = 0000123
网友答案:

Do you need to deal with negative numbers? If not, I would just do

def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)

or

def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }

Otherwise, you can use NumberFormat:

val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)
分享给朋友:
您可能感兴趣的文章:
随机阅读: