提取的最后n个字符从字符串中获取最后一个字符n
,我认为你可以使用从红宝石串
ending = string[-n..-1]
但如果字符串小于n
字母长,你会得到nil
。
什么解决方法可用?
背景:这些字符串是纯ASCII,我有权访问ruby 1.9.1,并且我使用普通的旧的Ruby对象(没有web框架)。
提取的最后n个字符从字符串中获取最后一个字符n
,我认为你可以使用从红宝石串
ending = string[-n..-1]
但如果字符串小于n
字母长,你会得到nil
。
什么解决方法可用?
背景:这些字符串是纯ASCII,我有权访问ruby 1.9.1,并且我使用普通的旧的Ruby对象(没有web框架)。
在这里你有一个衬垫,你可以把一个大于字符串的大小:
"123".split(//).last(5).to_s
为Ruby 1.9+
"123".split(//).last(5).join("").to_s
为Ruby 2.0+,加入回报串
"123".split(//).last(5).join
ending = string.reverse[0...n].reverse
这是我此页,满足了能够提供一个结束字符长度的要求上看到的最好的方法超过了整个字符串的长度。 –
例如,如果您打算采用“abcde”,“ab”和“a”等一组刺的最后3个字符。这种技术将导致“cde”,“ab”和“a”使用相同的代码。 >>>“cde”'“ab”.reverse [0,3] .reverse' >>>“ab”'“a”.reverse [0, 3] .reverse' >>>“a” –
你尝试过一个正则表达式吗?
string.match(/(.{0,#{n}}$)/)
ending=$1
正则表达式在字符串的结尾捕捉尽可能多的字符就可以了,但不超过N多。并将其存储在$ 1中。
从字符串中获得最后的n个字符,你可以这样做
a [-n,n]如果a是数组。
下面是一个例子,如果你想要一个。
红宝石1.9.2-P180:006>一个= “911234567890”
=> “911234567890”
红宝石1.9.2-P180:009>一个[-5,5]
=> “67890”
红宝石1.9.2-P180:010>一个[-7,7-]
=> “4567890”
如果这个数字太大,返回'nil',这就是这个问题特别想要避免的。 –
很好的答案。清洁。 – Volte
展示次数EmFi的答案。
string[/.{,#{n}}\z/m]
在直红宝石(无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"
最好的一个。谢谢。 –
Ruby不暗示Rails。 – Volte
如果您使用的是最新版本的Ruby,那么您可以使用“chars”而不是split。 –
这不适用于1.9。其他答案似乎。 – rogerdpack
我用“12345678910”.split(//)。last(7).join.to_s –