ruby - 如何将 Ruby 字符串强制为 n 个字符

标签 ruby string variables string-length

如何使用 puts 将 Ruby 字符串变量输出强制为 n 个字符,以便如果变量更长,它将被截断,如果更短,它将通过尾随或前导空格扩展?

是否有一些标准方法可以做到这一点?

最佳答案

与许多其他语言一样,Ruby 支持使用格式字符串:

[11] (pry) main: 0> '%3.3s' % 'f'
=> "  f"
[12] (pry) main: 0> '%3.3s' % 'foo'
=> "foo"
[13] (pry) main: 0> '%3.3s' % 'foobar'
=> "foo"

如果你想在右边填充,在格式字符串中使用-:

[14] (pry) main: 0> '%-3.3s' % 'f'
=> "f  "
[15] (pry) main: 0> '%-3.3s' % 'foo'
=> "foo"
[16] (pry) main: 0> '%-3.3s' % 'foobar'
=> "foo"

您也可以使用 printfsprintf,但我更喜欢更通用的 % ,类似于 sprintf .

来自 sprintf 文档:

  s   | Argument is a string to be substituted.  If the format
      | sequence contains a precision, at most that many characters
      | will be copied.

和:

-        | all           | Left-justify the result of this conversion.

What if I want to pad not with spaces but with some other character?

Ruby底层代码是用C写的,硬编码使用' '作为pad字符,所以直接不行,除非你想修改源码,重新编译你的Ruby ,并使用该语言的一次性版本。相反,您可以执行以下操作:

[17] (pry) main: 0> ('%-3.3s' % 'f').gsub(' ', '.')
=> "f.."

虽然这比简单的 gsub 复杂得多。如果您需要提供特殊字符,通常最好不使用格式字符串来调整字符串。格式字符串非常强大,但并不完全灵活。

否则,我会采用类似@steenslag 的解决方案,这是您自己推出解决方案的基础。您失去了使用格式字符串的能力,必须依靠连接字符串或类似的东西来获得柱状输出,但它也可以工作。

关于ruby - 如何将 Ruby 字符串强制为 n 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714936/

相关文章:

mysql - 如何从服务器中的文件转储

ruby - 如何避免 heredoc 中的 last\n 字符

ruby - 是否可以从父类创建子类的实例?

python - 支持单个字符串和数组作为一个参数

C++如何检查字母是否是alpha(不是拉丁字母)

java - int 变量未初始化

ruby-on-rails - Rails 3/paperclip/imagemagick - 合并两个图像

javascript - 如何将 '(1,2,3,4)' 更改为 '1,2,3,4'

variables - 什么时候使用实例变量比使用let()更有优势?

PHP:通过链接传递变量