답변:
여기에 하나의 라이너가 있으며 문자열 크기보다 큰 숫자를 넣을 수 있습니다.
"123".split(//).last(5).to_s
루비 1.9 이상
"123".split(//).last(5).join("").to_s
루비 2.0+의 경우 join은 문자열을 반환합니다.
"123".split(//).last(5).join
join
작동합니다. to_s
조인을 사용 하면 마지막이 필요하지 않다고 생각합니다 .
n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i
를 사용하여 숫자 값을 추출하기 위해 to_i를 수행하려면 to_s가 필요했습니다.
"123".split(//).last(5).join
(루비 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가 배열이면 a [-n, n].
원하는 경우 여기와 예가 있습니다.
루비 -1.9.2-p180 : 006> a = "911234567890"
=> "911234567890"
루비 -1.9.2-p180 : 009> a [-5,5]
=> "67890"
루비 -1.9.2-p180 : 010> a [-7,7]
=> "4567890"
nil
이 질문이 특별히 피하려고 한 것입니다.
chars
분할 대신 사용할 수 있습니다 .