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

String 如何将Int转换为给定长度的字符串,并对齐前导零?,string,scala,formatting,int,String,Scala,Formatting,Int,如何将Int转换为7个字符长的字符串,从而将123转换为“0000123”?简短回答: "1234".reverse.padTo(7, '0').reverse 长答案: "1234".reverse.padTo(7, '0').reverse Scala(它包含Scala字符串对象由于隐式转换而具有的一组很好的方法)有一个padTo方法,它将一定数量的字符附加到字符串中。例如: "aloha".padTo(10,'a') 将返回“alohaaaaaa”。注意字符串的元素类型是Char,因

如何将
Int
转换为7个字符长的
字符串,从而将
123
转换为
“0000123”

简短回答:

"1234".reverse.padTo(7, '0').reverse
长答案:

"1234".reverse.padTo(7, '0').reverse
Scala(它包含Scala字符串对象由于隐式转换而具有的一组很好的方法)有一个
padTo
方法,它将一定数量的字符附加到字符串中。例如:

"aloha".padTo(10,'a')
将返回“alohaaaaaa”。注意字符串的元素类型是Char,因此
'a'
周围有单引号

您的问题有点不同,因为您需要在字符前面加上前缀,而不是在字符后面加上。这就是为什么您需要反转字符串,追加填充字符(因为字符串已反转,所以您现在需要对它们进行预加),然后再次反转整个字符串以获得最终结果


希望这有帮助

简短回答:

"1234".reverse.padTo(7, '0').reverse
长答案:

"1234".reverse.padTo(7, '0').reverse
Scala(它包含Scala字符串对象由于隐式转换而具有的一组很好的方法)有一个
padTo
方法,它将一定数量的字符附加到字符串中。例如:

"aloha".padTo(10,'a')
将返回“alohaaaaaa”。注意字符串的元素类型是Char,因此
'a'
周围有单引号

您的问题有点不同,因为您需要在字符前面加上前缀,而不是在字符后面加上。这就是为什么您需要反转字符串,追加填充字符(因为字符串已反转,所以您现在需要对它们进行预加),然后再次反转整个字符串以获得最终结果


希望这有帮助

你需要处理负数吗?如果不是,我就这么做

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

否则,您可以使用
NumberFormat

val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)

你需要处理负数吗?如果不是,我就这么做

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

否则,您可以使用
NumberFormat

val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)

Java库具有非常好的(如在“优秀”中)功能,可从丰富的字符串类访问:

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

scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
编辑后Scala 2.10:正如fommil所建议的,从2.10开始,还有一个格式化字符串插值器(不支持本地化):

编辑2019年4月:

"1234".reverse.padTo(7, '0').reverse
  • 如果需要前导空格而不是零,只需在格式说明符中省略
    0
    。在上述情况下,它将在2.12.8 REPL中进行
    f“$expr%7d”
    。不需要按照注释中的建议进行字符串替换,甚至不需要按照另一条注释中的建议在
    7
    前面加一个显式空格
  • 如果长度是可变的,
    s“%${len}d”.format(“123”)

Java库有非常好的(如极好的)功能,可以从丰富的字符串类访问:

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

scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
编辑后Scala 2.10:正如fommil所建议的,从2.10开始,还有一个格式化字符串插值器(不支持本地化):

编辑2019年4月:

"1234".reverse.padTo(7, '0').reverse
  • 如果需要前导空格而不是零,只需在格式说明符中省略
    0
    。在上述情况下,它将在2.12.8 REPL中进行
    f“$expr%7d”
    。不需要按照注释中的建议进行字符串替换,甚至不需要按照另一条注释中的建议在
    7
    前面加一个显式空格
  • 如果长度是可变的,
    s“%${len}d”.format(“123”)

huynhjl找到了正确的答案,所以这里有一个替代方案:

"0000000" + 123 takeRight 7

huynhjl找到了正确的答案,所以这里有一个替代方案:

"0000000" + 123 takeRight 7

如果本问答成为经典纲要

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

如果本问答成为经典纲要

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

padding
%02d
表示,表示
0
的前缀,使长度
2

scala> val i = 9 
i: Int = 9

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

scala> println(paddedVal)             
09

padding
%02d
表示,表示
0
的前缀,使长度
2

scala> val i = 9 
i: Int = 9

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

scala> println(paddedVal)             
09

本,dhg,谢谢你们的投票,尽管你们是一群很难对付的人!我认为我们仍然可以从其他答案中学到一些东西,投票系统会关注哪个答案是相关的。你不需要这么明确,你可以写
f“$a%07d”
(如果你的范围中有
val
/
var
a
)@fommil,事实上,当我发布最初的答案时,这还没有出现,但是现在我也会使用f插值器。如果你想要前导空格而不是前导零,那么你可以使用
regex
string.replaceAll(\\G0“,”)
来用空格替换前导零,如果你想要前导空格而不是前导零,那么就使用
%7d.format(123)
.Ben,dhg,谢谢你们的投票,尽管你们是一群坚强的人!我认为我们仍然可以从其他答案中学到一些东西,投票系统会关注哪个答案是相关的。你不需要这么明确,你可以写
f“$a%07d”
(如果你的范围中有
val
/
var
a
)@fommil,事实上,当我发布最初的答案时,这还没有出现,但既然f插值器存在,我也会使用它。如果你想要前导空格而不是前导零,那么你可以使用
regex
string.replaceAll(\\G0“,”)
用空格替换前导零,如果你想要前导空格而不是前导零,那么就使用
%7d”。格式(123)
.Use.mkString返回字符串或Use.a.mkString返回字符串或Use.mkString返回字符串或Use.a.对于大于10M的数字,此操作将失败:
“0000000”+Int.MaxValue takeRight 7
=>
7483647
。虽然从字面上理解这个问题“技术上”是正确的,但如果数字太大,读者不希望填充数字超过7位。你可以这么说