2015-01-14 39 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]を使用することです。 Oleg Pischicovの答えをチェックしてください。

line[-1] 
# => "c" 

オリジナル回答

ルビーでは、文字列の最後の文字を取得するために[-1, 1]を使用することができます。ここで:

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

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

説明: 文字列は、文字列の末尾 から逆方向に数え負の指数は、あなたが望むどのように多くの文字の長さ( で1この例)を取ることができます。 OPの例のようString#sliceを使用して

:(ゆうハウの答えで説明したようにのみルビー以降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" 
+0

ありがとうございます。しかし、私の論理を使って解決策を見せてもらえますか? – stack1

+0

私は自分のアンサーチェックを更新しました。 – shivam

+0

line.slice(line.length - 1) - 同じ出力が得られました。これはRubyバージョン<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

スライス()メソッドがあなたのために行います

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

この戻り最後のn文字

+0

いいえ、それは役に立ちません。それは私に59 – stack1

+0

本当に文字列です..を与える?この "あなたの文字列" .class ..を印刷すると、何が返されますか?文字列か何か他の..? –

+1

これはRuby pre-1.9の正しい動作です。彼はRuby 1.8.7を使用していたとOPからは指摘されていました。 –

1

については

a = "hello there" 

a[-1] #=> "e" 

これは最も簡単な解決方法です。

36

だけ使う "-1" インデックス:例

あなたはこのようなものを使用することができRubyで
"hello".slice(-1) 
# => "o" 

おかげ

+0

これは他のものよりずっと簡単です。 – emeth

5

あなたがRailsのを使用している場合は、このように、あなたの文字列にメソッドの#lastを適用します。

"abc".last 
# => c 
関連する問題