Pau*_*aul 42 ruby string variables string-length
如何使用puts
n个字符强制使用Ruby字符串变量输出,这样如果变量更长,它将被截断,如果更短,它将通过尾随或前导空格扩展?
有没有一些标准的方法来做到这一点?
the*_*Man 54
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"
如果要在右侧填充,请-
在格式字符串中使用a :
[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.
如果我想填充空格而不是其他字符怎么办?
底层的Ruby代码是用C语言编写的,它的硬编码' '
用作pad字符,因此不可能直接使用,除非你想修改源代码,重新编译你的Ruby,并使用该语言的一次性版本. .相反,你可以这样做:
[17] (pry) main: 0> ('%-3.3s' % 'f').gsub(' ', '.') => "f.."
这比简单的要复杂得多gsub
.如果需要提供特殊字符,通常最好不使用格式字符串来调整字符串.格式字符串非常强大,但它们并不完全灵活.
否则,我会选择像@ steenslag这样的解决方案,这是推销自己的解决方案.你失去了使用格式字符串的能力,并且必须依靠连接你的字符串或类似的东西来获得柱状输出,但它也会起作用.
小智 37
使字符串固定长度更短:
str_var.slice(1..10)
Run Code Online (Sandbox Code Playgroud)
要使字符串固定长度更长:
str_var.ljust(10, ' ')
Run Code Online (Sandbox Code Playgroud)
它们可以合并为:
(str_var.length > 10) ? str_var.slice(1..10) : str_var.ljust(10, ' ')
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
将slice
方法([])与rjust
.
对于纯 Ruby one liner,您可以这样做:
(str + ' ' * length)[0,length]
Run Code Online (Sandbox Code Playgroud)
这将产生:
str = "Hello"
length = 10
=> "Hello "
Run Code Online (Sandbox Code Playgroud)
或者:
str = "Hello"
length = 2
=> "He"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29032 次 |
最近记录: |