Подтвердить что ты не робот

Получить последний символ в строке

Я хочу получить последний символ в строке MY WAY - 1) Получить последний индекс 2) Получить символ в последнем индексе, как STRING. После этого я сравню строку с другой, но здесь я не буду включать эту часть кода. Я попробовал код ниже, и вместо этого я получил странное число. Я использую ruby ​​1.8.7.

Почему это происходит и как это сделать?

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

Вывод -

last index = 3
59

Ruby docs сказал мне, что массивные нарезки работают таким образом -

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

Но в моем коде это не так.

4b9b3361

Ответ 1

UPDATE: Я постоянно получаю голоса по этому поводу, следовательно, редактирование. Использование [-1, 1] является правильным, однако лучше выглядящее решение будет использовать только [-1]. Отметьте ответ Олега Пищикова.

line[-1]
# => "c"

Оригинальный ответ

В рубине вы можете использовать [-1, 1] для получения последней char строки. Здесь:

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

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

Объяснение: Строки могут принимать отрицательный индекс, отсчитываемый от конца строки и длину того, сколько символов вы хотите (один в этот пример).

Используя String#slice, как в примере OP: (будет работать только на ruby ​​1.9, как объяснялось в ответе Ю Хау)

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

Отпустите орехи!!!

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

Ответ 2

Просто используйте индекс "-1":

a = "hello there"

a[-1] #=> "e"

Это самое простое решение.

Ответ 3

Вы можете использовать a[-1, 1] для получения последнего символа.

Вы получаете неожиданный результат, потому что возвращаемое значение String#[] изменилось. Вы используете Ruby 1.8.7, ссылаясь на документ Ruby 2.0

До Ruby 1.9 возвращается целочисленный код символа. Начиная с Ruby 1.9, он возвращает сам символ.

String#[] в Ruby 1.8.7:

str[fixnum] => fixnum or nil

String#[] в Ruby 2.0:

str[index] → new_str or nil

Ответ 4

Если вы используете Rails, примените метод #last к своей строке, например:

"abc".last
# => c

Ответ 5

В рубине вы можете использовать что-то вроде этого:

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

это возвращает последние n символов

Ответ 6

Метод Slice() сделает для вас.

Для Ex

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

Спасибо