首页 > 解决方案 > 如何在Ruby中用零填充字符串

问题描述

我有一种情况,我有一个包含字母数字值的数组。

我希望遍历它们并用填充的 0 打印出值。

当我有一个数组并正常循环它们时,它工作正常:

acct = ["123425326AA", "234123412341234AA", "12342342CP", "12342314234", "5"]

acct.each { |acct| puts acct }

Output:
$ruby main.rb
123425326AA
234123412341234AA
12342342CP
12342314234
5

但是,当我尝试使用填充的 0 时,我遇到了问题。我试过玩, %#d但我不明白。例如,我试图%23d 在循环中使用 23 个“0”来填充它。

我正在寻找的输出类型如下:

000000000000123425326AA
000000234123412341234AA
000000000000012342342CP
00000000000012342314234
00000000000000000000005

我试着玩弄这段代码,它提到了一些关于整数的东西,我的数组值确实包含一些 alpha,我不确定这是否是根本原因。但这里有一些我尝试使用的代码示例。

acct.each { |i| puts "%23d" % i }

Output:
$ruby main.rb
main.rb:17:in `%': invalid value for Integer(): "123425326AA" (ArgumentError)
    from main.rb:17:in `block in <main>'
    from main.rb:17:in `each'
    from main.rb:17:in `<main>'

从这里开始,我尝试将我的数组顺序更改为以下,它部分工作并且能够处理仅是数字但一旦达到字母数字值就失败的值。此外,它也没有放置0,而是用X个空格代替了它。

acct = ["5", "12342314234", "234123412341234AA", "12342342CP", "123425326AA"]
acct.each { |acct| puts "%23d" % acct }

Output:
$ruby main.rb
                      5
            12342314234
main.rb:18:in `%': invalid value for Integer(): "234123412341234AA" (ArgumentError)
    from main.rb:18:in `block in <main>'
    from main.rb:18:in `each'
    from main.rb:18:in `<main>'

我认为需要某种格式,但我不确定如何实现。我确实在一些帖子中看到他们会添加int.to_s但不确定:

acct.each { |acct| puts "%23d" % acct.to_s }

标签: arraysrubyloopspadding

解决方案


Ruby 中的字符串有一个零填充函数:

puts acct.rjust(23, '0')

推荐阅读