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位。你可以这么说