获取字符串中的最后一个字

时间:2015-01-14 06:51:49

标签: ruby ruby-1.8.7

我想获取字符串中的最后一个字符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"

但是,在我的代码中却没有。

8 个答案:

答案 0 :(得分:46)

<强>更新 我继续对此投票,因此编辑。使用[-1, 1]是正确的,但更好看的解决方案是仅使用[-1]。检查Oleg Pischicov的回答。

line[-1]
# => "c"

原始答案

在ruby中,您可以使用[-1, 1]来获取字符串的最后一个字符。这里:

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

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

<强>说明: 字符串可以采用负数索引,从最后开始向后计数 字符串,以及你想要多少个字符的长度(一个在 这个例子)。

在OP的示例中使用String#slice :( 仅适用于ruby 1.9以上,如Yu Hau的回答所述

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"

答案 1 :(得分:40)

只需使用“-1”索引:

a = "hello there"

a[-1] #=> "e"

这是最简单的解决方案。

答案 2 :(得分: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

答案 3 :(得分:5)

如果您正在使用Rails,那么将#last方法应用于您的字符串,如下所示:

"abc".last
# => c

答案 4 :(得分:1)

在红宝石中你可以使用这样的东西:

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

这会返回最后n个字符

答案 5 :(得分:1)

我将使用#last方法,因为字符串是一个数组。

获取最后一个字符。

"hello there".last() #=> "e"

要获取最后3个字符,您可以将数字传递给#last。

"hello there".last(3) #=> "ere"

答案 6 :(得分:0)

Slice()方法可以帮到你。

对于Ex

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

由于

答案 7 :(得分:0)

您的代码还算有效,您看到的“奇怪数字”是; ASCII码。每个字符都有一个相应的ASCII码(https://www.asciitable.com/)。您可以使用对话puts last_char.chr,它应该输出;