如何强制使用最多puts
n 个字符输出 Ruby 字符串变量,以便如果变量较长,它将被截断,如果较短,它将通过尾随或前导空格扩展?
有没有一些标准的方法来做到这一点?
如何强制使用最多puts
n 个字符输出 Ruby 字符串变量,以便如果变量较长,它将被截断,如果较短,它将通过尾随或前导空格扩展?
有没有一些标准的方法来做到这一点?
Ruby 支持使用格式字符串,就像许多其他语言一样:
[11](撬)主:0>'%3.3s'%'f' => "f" [12] (pry) main: 0> '%3.3s' % 'foo' => “富” [13] (pry) main: 0> '%3.3s' % 'foobar' => “富”
如果要在右侧填充,请-
在格式字符串中使用 a:
[14](撬)主:0>'%-3.3s'%'f' => "f" [15](撬)主要:0>'%-3.3s'%'foo' => “富” [16] (pry) main: 0> '%-3.3s' % 'foobar' => “富”
您也可以使用printf
or sprintf
,但我更喜欢更通用%
的,例如sprintf
.
从sprintf
文档:
小号 | 参数是要替换的字符串。如果格式 | 序列包含一个精度,最多多少个字符 | 将被复制。
和:
- | 全部 | 左对齐此转换的结果。
如果我不想用空格而是用其他字符填充怎么办?
底层的 Ruby 代码是用 C 编写的,它被硬编码' '
为填充字符,所以这是不可能的,除非你想修改源代码,重新编译你的 Ruby,并使用一次性版本的语言. 相反,您可以执行以下操作:
[17] (pry) main: 0> ('%-3.3s' % 'f').gsub(' ', '.') => “f..”
这比简单的要复杂得多gsub
。如果您需要提供特殊字符,通常最好在不使用格式字符串的情况下调整字符串。格式字符串非常强大,但它们并不完全灵活。
否则,我会选择类似@steenslag 的解决方案,这是您自己的解决方案的基础。你失去了使用格式字符串的能力,不得不依靠连接你的字符串或类似的东西来获得列输出,但它也可以工作。
使字符串固定长度更短:
str_var.slice(0..10) # starts at the first letter
使字符串固定长度更长:
str_var.ljust(10, ' ')
它们可以组合成类似的东西:
(str_var.length > 10) ? str_var.slice(1..10) : str_var.ljust(10, ' ')
str_var
当然,你的字符串在哪里
class String
def fix(size, padstr=' ')
self[0...size].rjust(size, padstr) #or ljust
end
end
p 'lettersletters'.fix(9) #=> "lettersle"
p 'letters'.fix(10, '.') #=> "...letters"
将slice
方法([])与rjust
.
对于纯 Ruby one 班轮,您可以这样做:
(str + ' ' * length)[0,length]
这将产生:
str = "Hello"
length = 10
=> "Hello "
或者:
str = "Hello"
length = 2
=> "He"
If you're talking about a method to truncate strings I would check out ActionView::Helpers::TextHelper#truncate
From the examples:
truncate("Once upon a time in a world far far away")
# => Once upon a time in a world...