如何使用 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"
您也可以使用 printf
或 sprintf
,但我更喜欢更通用的 %
,类似于 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/