n
문자열에서 마지막 문자 를 얻으려면 다음을 사용할 수 있다고 가정했습니다.
ending = string[-n..-1]
그러나 문자열이 n
글자 보다 짧으면 nil
.
어떤 해결 방법을 사용할 수 있습니까?
배경 : 문자열은 일반 ASCII이며 ruby 1.9.1에 액세스 할 수 있으며 Plain Old Ruby Objects (웹 프레임 워크 없음)를 사용하고 있습니다.
답변
여기에 하나의 라이너가 있으며 문자열 크기보다 큰 숫자를 넣을 수 있습니다.
"123".split(//).last(5).to_s
루비 1.9 이상
"123".split(//).last(5).join("").to_s
루비 2.0+의 경우 join은 문자열을 반환합니다.
"123".split(//).last(5).join
답변
제가 생각할 수있는 가장 쉬운 해결 방법은 다음과 같습니다.
ending = str[-n..-1] || str
(편집 : or
연산자는 할당보다 우선 순위가 낮으므로 ||
대신 사용하십시오 .)
답변
직선 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
답변
다음 코드를 사용할 수 있습니다.
string[string.length-n,string.length]
답변
문자열에서 마지막 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”
답변
정규식을 사용해 보셨습니까?
string.match(/(.{0,#{n}}$)/)
ending=$1
정규식은 문자열 끝에서 가능한 한 많은 문자를 캡처하지만 n 개를 넘지 않습니다. 그리고 $ 1에 저장합니다.