2015-01-14 3 views
20

문자열의 마지막 문자를 가져오고 싶습니다. MY WAY - 1) 마지막 색인 얻기 2) 마지막 색인에있는 문자를 STRING 형식으로 가져옵니다. 그 다음에 문자열을 다른 문자열과 비교할 것이지만 여기서 그 부분을 포함하지 않을 것입니다. 나는 아래의 코드를 시도하고 이상한 숫자를 얻는다. 나는 1.8.7 루비를 사용하고있다.문자열의 마지막 문자 가져 오기

왜 이런 일이 발생하며 어떻게해야합니까?

a = "hello there" 
a[1] #=> "e" 

하지만, 내 코드에서 그렇지 않은 -

last index = 3 
59 

Ruby docs

출력 -

line = "abc;" 
last_index = line.length-1 
puts "last index = #{last_index}" 
last_char = line[last_index] 
puts last_char 

는 배열 슬라이스가이 방식으로 작동 하더군요.

+0

. Java와 C#에서는 결코 이런 일이 일어나지 않습니다. – stack1

+10

그냥'line [-1]'을 사용하십시오. 왜 모두가'line [-1, 1] '로 대답하는지 잘 모르겠습니다. – Ryan

답변

33

업데이트 : 나는 이것에 대한 지속적인 투표를 계속하고있다. [-1, 1]을 사용하는 것이 맞지만 더 좋은 해결책은 [-1]을 사용하는 것입니다. 올렉 피시 코프의 대답을 확인하십시오.

line[-1] 
# => "c" 

원래 대답

루비에서는 문자열의 마지막 문자를 얻을 수 [-1, 1]를 사용할 수 있습니다. 여기 :

line = "abc;" 
# => "abc;" 
line[-1, 1] 
# => ";" 

teststr = "some text" 
# => "some text" 
teststr[-1, 1] 
# => "t" 

설명 : 문자열은 문자열의 끝 부터 거꾸로 계산 부정적인 인덱스, 당신이 ( 한이 예제를) 원하는 얼마나 많은 문자의 길이를 취할 수 있습니다.

영업 이익의 예에서와 같이 String#slice 사용 :

line.slice(line.length - 1) 
# => ";" 
teststr.slice(teststr.length - 1) 
# => "t" 

너트를 가자 ( 만 이후로 유 하우의 대답에 설명 된 루비 1.9에서 작동 를)!

teststr.split('').last 
# => "t" 
teststr.split(//)[-1] 
# => "t" 
teststr.chars.last 
# => "t" 
teststr.scan(/.$/)[0] 
# => "t" 
teststr[/.$/] 
# => "t" 
teststr[teststr.length-1] 
# => "t" 
+0

감사합니다. 하지만 내 논리를 사용하는 솔루션을 보여줄 수 있습니까? – stack1

+0

내 답변 확인을 업데이트했습니다. – shivam

+0

line.slice (line.length - 1) - 또한 동일한 출력을 제공합니다. 이것이 루비 버전 <1.9.x의 문제인 것처럼 보입니다. 또한 Yu Hao의 대답을 읽어보십시오. – stack1

5

당신은 마지막 문자를 얻을 수 a[-1, 1]를 사용할 수 있습니다.

String#[]의 반환 값이 변경되어 예기치 않은 결과가 발생합니다. Ruby 2.0의 문서를 참조하면서 Ruby 1.8.7을 사용 중입니다.

Ruby 1.9 이전 버전에서는 정수 문자 코드를 반환합니다. Ruby 1.9부터 문자 자체를 반환합니다.

String#[] in Ruby 1.8.7

:

str[fixnum] => fixnum or nil 

String#[] in Ruby 2.0 :

str[index] → new_str or nil 
+0

나는이 펑키 한 행동이 내 오래된 루비 버전과 어떤 관계가 있다고 느꼈다. 감사. – stack1

0

슬라이스() 방법은 당신을 위해 할 것입니다. 예를 들어

"hello".slice(-1) 
# => "o" 

감사

이 같은 것을 사용할 수 있습니다 루비에서
+0

아니요. 도움이되지 않습니다. 그것은 내게 59 – stack1

+0

이 정말로 문자열이라는 것을 알려줍니다 ..? 이 "your string".class ..를 출력하면 어떻게 되나요? 문자열이나 다른 뭔가 ..? –

+1

이것은 Ruby pre-1.9의 올바른 동작입니다. OP는 그가 낡고 오래된, 비추천이고 유지 보수가 안되는 버전 인 Ruby 1.8.7을 사용한다고 언급했다. –

1

:

ending = str[-n..-1] || str 

이 반환 마지막 n 문자

36

그냥 사용 "-1"인덱스 :

a = "hello there" 

a[-1] #=> "e" 

가장 간단한 해결책입니다.

+0

이것은 다른 것보다 훨씬 간단합니다. – emeth

5

당신이 레일을 사용하는 경우, 다음과 같이 당신의 문자열 메소드 #last을 적용 : 이것은 내게 너무 직관적 보인다

"abc".last 
# => c 
관련 문제