【发布时间】:2010-02-01 05:05:29
【问题描述】:
要从字符串中获取最后一个 n 字符,我假设您可以使用
ending = string[-n..-1]
但如果字符串的长度小于n 字母,则会得到nil。
有哪些解决方法?
背景:字符串是纯 ASCII,我可以访问 ruby 1.9.1,并且我使用的是普通旧 Ruby 对象(无 Web 框架)。
【问题讨论】:
要从字符串中获取最后一个 n 字符,我假设您可以使用
ending = string[-n..-1]
但如果字符串的长度小于n 字母,则会得到nil。
有哪些解决方法?
背景:字符串是纯 ASCII,我可以访问 ruby 1.9.1,并且我使用的是普通旧 Ruby 对象(无 Web 框架)。
【问题讨论】:
嗯,我能想到的最简单的解决方法是:
ending = str[-n..-1] || str
(编辑:or 运算符的优先级低于赋值,因此请务必改用 ||。)
【讨论】:
string.reverse[0..n].reverse 更容易阅读,这让我有点“等等,他为什么要这样做?” (或者如果我没有在这个问题的上下文中阅读它)
|| 而不是or,或者在str[-n..-1] or str 周围加上括号。
这里你有一个单行,你可以放一个大于字符串大小的数字:
"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。
join 有效。如果您使用 join,我认为您不需要最后一个 to_s。
n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i 我需要 to_s 来执行 to_i 来提取数值。
"123".split(//).last(5).join (Ruby 2.0.0)
在纯 Ruby(没有 Rails)中,你可以这样做
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"
您可以使用以下代码:
string[string.length-n,string.length]
【讨论】:
要从字符串中获取最后 n 个字符,您可以这样做
a[-n, n] 如果 a 是数组。
如果你想要的话,这里有一个例子。
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,这是本题特意要避免的。
你试过正则表达式吗?
string.match(/(.{0,#{n}}$)/)
ending=$1
正则表达式在字符串末尾捕获尽可能多的字符,但不超过 n。并将其存储在 1 美元中。
【讨论】:
对 EmFi 的回答进行改进。
string[/.{,#{n}}\z/m]
【讨论】:
我只是简单地使用这个:
str.last(n)
【讨论】: