要从字符串中获取最后 n
个字符,我认为可以使用
ending = string[-n..-1]
但如果字符串长度小于n
,则会返回nil
。
有哪些解决方法?
背景:这些字符串是普通ASCII码,并且我可以访问Ruby 1.9.1,我正在使用普通的Ruby对象(没有Web框架)。
嗯,我能想到的最简单的解决方法是:
ending = str[-n..-1] || str
(编辑:逻辑或运算符的优先级低于赋值运算符,因此请确保使用||
代替or
。)
这里有一个一行式的代码,你可以在其中输入一个大于字符串长度的数字:
"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
chars
代替split
。 - Andrew Grimmjoin
函数可以使用。如果你使用了join
,我认为你不需要最后的to_s
。 - Andrew Grimm"123".split(//).last(5).join
(Ruby 2.0.0)。 - Pavel Nikolov在不使用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"
如果你在使用Ruby on Rails,你可以在字符串对象上调用方法first
和last
。这些方法因为简洁易懂而被推荐使用。[1] pry(main)> a = 'abcdefg'
=> "abcdefg"
[2] pry(main)> a.first(3)
=> "abc"
[3] pry(main)> a.last(4)
=> "defg"
ending = string.reverse[0...n].reverse
"abcde".reverse[0,3].reverse
>>> "cde" "ab".reverse[0,3].reverse
>>> "ab" "a".reverse[0,3].reverse
>>> "a" - Rob.Kachmar您可以使用以下代码:
string[string.length-n,string.length]
如果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"
nil
,而这正是该问题特别想避免的。 - Andrew Grimm你尝试过使用正则表达式吗?
string.match(/(.{0,#{n}}$)/)
ending=$1
对于那些使用Ruby on Rails的人,你可以简单地这样做:
str.last(n)
last
方法不存在于 String
。对此,这里有许多其他很好的回答。last
方法在 String
中不存在。您应该删除此答案。 - Casper对EmFi的回答进行改进。
string[/.{,#{n}}\z/m]
string.reverse[0..n].reverse
更易于阅读,否则我会停留一秒钟,问自己:“他为什么要那样做?”(或者如果我不是在读这个问题的情况下的话) - Arkaaito||
д»Јжӣҝor
пјҢжҲ–иҖ…еңЁstr[-n..-1] or str
е‘ЁеӣҙеҠ дёҠжӢ¬еҸ·гҖӮ - Andrew Grimm