Rubyを使用して文字列の最初の文字を取得するにはどうすればよいですか?
最終的に私がしていることは、誰かの姓を取って、それからイニシャルを作成することです。
文字列が "Smith"の場合、 "S"が必要です。
"Smith".chr #=> "S"
Rubyを使用して文字列の最初の文字を取得するにはどうすればよいですか?
最終的に私がしていることは、誰かの姓を取って、それからイニシャルを作成することです。
文字列が "Smith"の場合、 "S"が必要です。
"Smith".chr #=> "S"
回答:
Rubyのオープンクラスを使用して、コードをより読みやすくすることができます。たとえば、これ:
class String
def initial
self[0,1]
end
end
initial
任意の文字列でメソッドを使用できます。したがって、次の変数があるとします。
last_name = "Smith"
first_name = "John"
次に、イニシャルを非常にきれいに読みやすく取得できます。
puts first_name.initial # prints J
puts last_name.initial # prints S
ここに記載されている他の方法はRuby 1.8では機能しません(とにかく1.8を使用する必要があるわけではありません!-しかし、この回答が投稿されたとき、それはまだかなり一般的でした)。
puts 'Smith'[0] # prints 83
もちろん、定期的に実行していない場合、メソッドの定義はやり過ぎになる可能性があり、直接実行することもできます。
puts last_name[0,1]
Rubyの最新バージョン(1.9.0以降)を使用している場合、以下が機能するはずです。
'Smith'[0] # => 'S'
1.9.0+または1.8.7のいずれかを使用している場合、以下が機能するはずです。
'Smith'.chars.first # => 'S'
1.8.7より古いバージョンを使用している場合、これは機能するはずです。
'Smith'.split(//).first # => 'S'
注'Smith'[0,1]
んではない 1.8上で動作し、それはなりませんあなたの最初の文字を与え、それだけであなたの最初の与えるのバイトを。
"Smith"[0]
、文字「S」の整数値を返します。どちらのバージョンも従い"Smith"[0,1] == "S"
ます。
"Smith"[0,1]
は1.8で動作します(ASCIIを想定)。なぜリクエスタについてだけでなく、その質問から学びたいと思っている他のすべての人についても多くを想定しているのかわかりません。たとえば、Mac OS XにはRuby 1.8がバンドルされているため、これらのユーザーはインストールする必要はありません。
完全を期すために、Ruby 1.9以降、String#chrは文字列の最初の文字を返します。2.0と2.1でも利用できます。
"Smith".chr #=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]
、文字「S」の整数値を返します。どちらのバージョンも従い"Smith"[0,1] == "S"
ます。
"Smith"[0] == ?S
のRuby 1.8と1.9の両方に当てはまります
Ruby 1.9より前の迷惑なデザインの選択により、最初の文字の文字コードがsome_string[0]
返されます。これを記述する最も移植性の高い方法は、インデックス0で1文字の長さの部分文字列を取得するように指示することです。some_string[0,1]
これらの方法はどれでも機能します。
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.
以降は機能しませんname
。また、最後のものは、を削除しても意味があり.
ません。これは、同じことを行うために2つの異なる方法を使用しているためです- [0]
および chr()
。
'Smith'.first