web-dev-qa-db-de.com

Ruby: Wie bekomme ich das erste Zeichen einer Zeichenkette?

Wie kann ich mit Ruby das erste Zeichen in einer Zeichenfolge erhalten?

Letztendlich nehme ich den Nachnamen einer Person und erstelle daraus einen Anfangsbuchstaben.

Wenn die Zeichenfolge "Smith" ist, möchte ich nur "S".

100
Shpigford

Sie können die offenen Klassen von Ruby verwenden, um Ihren Code lesbarer zu machen. Zum Beispiel das:

class String
  def initial
    self[0,1]
  end
end

können Sie die initial-Methode für einen beliebigen String verwenden. Wenn Sie also die folgenden Variablen haben:

last_name = "Smith"
first_name = "John"

Dann können Sie die Initialen sehr sauber und leserlich erhalten:

puts first_name.initial   # prints J
puts last_name.initial    # prints S

Die andere Methode, die hier erwähnt wird, funktioniert nicht mit Ruby 1.8 (nicht, dass Sie ohnehin 1.8 verwenden sollten! - aber als diese Antwort veröffentlicht wurde, war sie immer noch üblich):

puts 'Smith'[0]           # prints 83

Wenn Sie dies nicht regelmäßig tun, kann es natürlich übertrieben sein, die Methode zu definieren, und Sie können es auch direkt tun:

puts last_name[0,1] 
118
iconoclast

Wenn Sie eine aktuelle Version von Ruby (1.9.0 oder höher) verwenden, sollte Folgendes funktionieren:

'Smith'[0] # => 'S'

Wenn Sie 1.9.0+ oder 1.8.7 verwenden, sollte Folgendes funktionieren:

'Smith'.chars.first # => 'S'

Wenn Sie eine ältere Version als 1.8.7 verwenden, sollte dies funktionieren:

'Smith'.split(//).first # => 'S'

Beachten Sie, dass 'Smith'[0,1] nicht auf 1.8 funktioniert, es wird nicht Ihnen das erste Zeichen geben, es gibt Ihnen nur das erste Byte .

93
Jörg W Mittag
"Smith"[0..0]

funktioniert sowohl in Ruby 1.8 als auch in Ruby 1.9.

27
Andrew Grimm

Der Vollständigkeit halber wird seit Ruby 1.9 String # chr das erste Zeichen eines Strings zurückgegeben. Es ist noch in 2.0 und 2.1 verfügbar.

"Smith".chr    #=> "S"

http://Ruby-doc.org/core-1.9.3/String.html#method-i-chr

21
Brandon

In der MRI 1.8.7 oder höher:

'foobarbaz'.each_char.first
14
Wayne Conrad

In Schienen

name = 'Smith'
name.first 
11
Suganya

Versuche dies:

>> a = "Smith"
>> a[0]
=> "S"

ODER

>> "Smith".chr
#=> "S"
7
Gagan Gami
>> s = 'Smith'                                                          
=> "Smith"                                                              
>> s[0]                                                                 
=> "S"                                                        
5
SilentGhost

Aufgrund einer ärgerlichen Entwurfsauswahl in Ruby vor 1.9 - some_string[0] gibt den Zeichencode des ersten Zeichens zurück - der tragbarste Weg, dies zu schreiben, ist some_string[0,1], das ihm sagt, dass er einen Teilstring an Index 0 mit 1 Zeichen Länge erhält.

2
Chuck

Eine weitere Option, die noch nicht erwähnt wurde:

> "Smith".slice(0)
#=> "S"
0
jeffdill2

Jede dieser Methoden wird funktionieren:

name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S