我正在从Ruby脚本输出一组编号的文件.这些数字来自递增计数器,但为了使它们在目录中很好地排序,我想在文件名中使用前导零.换一种说法
file_001 ...
代替
file_1
在将数字转换为字符串时,是否有一种简单的方法可以添加前导零?(我知道我可以"如果少于10 ......如果少于100").
Dan*_*tin 338
使用%
带字符串的运算符:
irb(main):001:0> "%03d" % 5
=> "005"
Run Code Online (Sandbox Code Playgroud)
左侧是printf格式字符串,右侧可以是值列表,因此您可以执行以下操作:
irb(main):002:0> filename = "%s/%s.%04d.txt" % ["dirname", "filename", 23]
=> "dirname/filename.0023.txt"
Run Code Online (Sandbox Code Playgroud)
这是一个printf格式的备忘单,您可能会发现它在形成格式字符串时很有用.printf格式最初来自C
函数printf
,但在perl,ruby,python,java,php等中提供了类似的格式化函数.
ale*_*dev 265
如果计数器中的最大位数已知(例如,对于计数器1..876,n = 3),则可以这样做
str = "file_" + i.to_s.rjust(n, "0")
Run Code Online (Sandbox Code Playgroud)
Óla*_*age 49
在连接文件名之前,你不能只使用值的字符串格式吗?
"%03d" % number
Run Code Online (Sandbox Code Playgroud)
tes*_*str 28
使用String#next
作为计数器.
>> n = "000"
>> 3.times { puts "file_#{n.next!}" }
file_001
file_002
file_003
Run Code Online (Sandbox Code Playgroud)
next
是相对'聪明',这意味着你甚至可以去
>> n = "file_000"
>> 3.times { puts n.next! }
file_001
file_002
file_003
Run Code Online (Sandbox Code Playgroud)
如其他答案所述,"%03d" % number
效果很好,但是与rubocop 红宝石风格指南背道而驰:
相对于相当神秘的String#%方法,建议使用sprintf及其别名格式
我们可以使用以下方法以更易读的方式获得相同的结果:
format('%03d', number)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
97014 次 |
最近记录: |