回答:
ここにあなたは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
join
機能します。to_s
ジョインを使うなら、最後は必要ないと思います。
n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i
のNokogiriを使用しました。数値を抽出するためにto_sを実行するためにto_sが必要でした。
"123".split(//).last(5).join
(Ruby 2.0.0)
まあ、私が考えることができる最も簡単な回避策は:
ending = str[-n..-1] || str
(編集:or
演算子の優先順位は代入よりも低いため、||
代わりに使用してください。)
string.reverse[0..n].reverse
により、「待って、なぜ彼はそれをしているのですか?」(または、この質問の文脈で読んでいなかった場合)
||
ではなく、or
かっこで囲んでくださいstr[-n..-1] or str
。
ストレート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"
文字列から最後の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
が返されます。これは、この質問が特に回避しようとしていたものです。
chars
は、分割の代わりに使用できます。