web-dev-qa-db-ja.com

文字列の最後の文字を取得

文字列の最後の文字を取得したいMY WAY-1)最後のインデックスを取得2)最後のインデックスの文字を文字列として取得。その後、文字列を別の文字列と比較しますが、ここではコードのその部分を含めません。以下のコードを試してみましたが、代わりに奇妙な数字が表示されます。私は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"

しかし、私のコードではそうではありません。

24
stack1

UPDATE:私はこれについて常に一定の賛成票を得ているため、編集します。 [-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"

説明:文字列は、文字列の末尾から逆方向にカウントする負のインデックスと、必要な文字数(この中の1つ)を取ることができます例)。

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"
47
shivam

「-1」インデックスを使用するだけです:

a = "hello there"

a[-1] #=> "e"

最も簡単なソリューションです。

41
Oleg Pischicov

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.

str[index] → new_str or nil
5
Yu Hao

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

"abc".last
# => c
5
victorhazbun

Rubyでは、次のようなものを使用できます。

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

これは最後のn文字を返します

1
Aram

文字列は配列なので、#lastメソッドを使用します。

最後のキャラクターを取得します。

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

最後の3文字を取得するには、#lastに数値を渡すことができます。

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

Slice()メソッドはあなたのために行います。

Exの場合

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

ありがとう

0
Breen ho

あなたのコードは動作します、あなたが見ている「奇妙な数字」は; ASCII code。すべての文字は対応するアスキーコードを持っています( https://www.asciitable .com / )。conversationputs last_char.chrに使用でき、;を出力する必要があります。

0
Pierre Ferry