要从字符串中获取最后的 n字符,我假定您可以使用
n
ending = string[-n..-1]
但是如果字符串小于 n字母长度,就得到 nil。
nil
有什么解决办法?
背景 : 字符串是普通的 ASCII,我可以访问 Ruby 1.9.1,我使用的是普通的旧 Ruby 对象(没有 web 框架)。
ending = string.reverse[0...n].reverse
我能想到的最简单的解决办法是:
ending = str[-n..-1] || str
(EDIT: The or operator has lower precedence than assignment, so be sure to use || instead.)
or
||
你试过正则表达式吗?
string.match(/(.{0,#{n}}$)/) ending=$1
正则表达式在字符串的末尾捕获尽可能多的字符,但不超过 n,并将其存储在 $1中。
这里有一行,你可以写一个大于字符串大小的数字:
"123".split(//).last(5).to_s
对于 Ruby 1.9 +
"123".split(//).last(5).join("").to_s
对于 Ruby 2.0 + ,join 返回一个字符串
"123".split(//).last(5).join
要从字符串中获取最后的 n 个字符,可以这样做
如果 a 是数组,则为 a [-n,n ]。
如果你想要的话,这里有一个例子。
Ruby-1.9.2-p180:006 > a = “911234567890”
= > “911234567890”
ruby-1.9.2-p180 :009 > a[-5,5]
= > “67890”
Ruby-1.9.2-p180:010 > a [-7,7]
= > “4567890”
对 EmFi 解答器的改进。
string[/.{,#{n}}\z/m]
在没有 Rails 的直接 Ruby 中,您可以
string.chars.last(n).join
例如:
2.4.1 :009 > a = 'abcdefghij' => "abcdefghij" 2.4.1 :010 > a.chars.last(5).join => "fghij" 2.4.1 :011 > a.chars.last(100).join => "abcdefghij"
如果您正在使用 RubyonRails,那么您可以对一个字符串对象调用方法 first和 last。这些方法是首选的,因为他们是简洁和直观的。
first
last
[1] pry(main)> a = 'abcdefg' => "abcdefg" [2] pry(main)> a.first(3) => "abc" [3] pry(main)> a.last(4) => "defg"
您可以使用以下代码:
string[string.length-n,string.length]
对于那些正在使用 Ruby on Rails的人,你可以简单地这样做:
str.last(n)
注意: 我意识到这并不能回答 OP 的问题,因为在 PLAIN Ruby (w/o Rails)中,last方法对于 String并不存在。对于这个问题,还有许多其他好的答案。
String