Wie kann ich mit Ruby das erste Zeichen in einer Zeichenfolge erhalten?
Letztendlich nehme ich den Nachnamen einer Person und erstelle daraus eine Initiale.
Wenn die Zeichenfolge also "Smith" war, möchte ich nur "S".
"Smith".chr #=> "S"
Wie kann ich mit Ruby das erste Zeichen in einer Zeichenfolge erhalten?
Letztendlich nehme ich den Nachnamen einer Person und erstelle daraus eine Initiale.
Wenn die Zeichenfolge also "Smith" war, möchte ich nur "S".
"Smith".chr #=> "S"
Antworten:
Sie können die offenen Klassen von Ruby verwenden, um Ihren Code besser lesbar zu machen. Zum Beispiel:
class String
def initial
self[0,1]
end
end
Mit dieser initial
Methode können Sie die Methode für jede Zeichenfolge verwenden. Wenn Sie also die folgenden Variablen haben:
last_name = "Smith"
first_name = "John"
Dann können Sie die Initialen sehr sauber und lesbar erhalten:
puts first_name.initial # prints J
puts last_name.initial # prints S
Die andere hier erwähnte Methode funktioniert nicht mit Ruby 1.8 (nicht, dass Sie 1.8 sowieso nicht mehr verwenden sollten! - aber als diese Antwort veröffentlicht wurde, war sie immer noch recht verbreitet):
puts 'Smith'[0] # prints 83
Wenn Sie dies nicht regelmäßig tun, kann das Definieren der Methode natürlich übertrieben sein, und Sie können es einfach direkt tun:
puts last_name[0,1]
Wenn Sie eine neuere Version von Ruby (1.9.0 oder höher) verwenden, sollte Folgendes funktionieren:
'Smith'[0] # => 'S'
Wenn Sie entweder 1.9.0+ oder 1.8.7 verwenden, sollte Folgendes funktionieren:
'Smith'.chars.first # => 'S'
Wenn Sie eine Version verwenden, die älter als 1.8.7 ist, sollte dies funktionieren:
'Smith'.split(//).first # => 'S'
Beachten Sie, dass 'Smith'[0,1]
dies unter 1.8 nicht funktioniert. Sie erhalten nicht das erste Zeichen, sondern nur das erste Byte .
"Smith"[0]
würde den ganzzahligen Wert des Zeichens 'S' zurückgeben. Beide Versionen gehorchen "Smith"[0,1] == "S"
.
"Smith"[0,1]
funktioniert auf 1.8 (unter der Annahme von ASCII). Ich bin mir nicht sicher, warum Sie so viel über den Antragsteller und über alle anderen annehmen, die aus dieser Frage lernen möchten. Mac OS X wird beispielsweise mit Ruby 1.8 geliefert, sodass für diese Benutzer keine Installation erforderlich ist.
"Smith"[0..0]
funktioniert sowohl in Ruby 1.8 als auch in Ruby 1.9.
Der Vollständigkeit halber gibt Ruby 1.9 String # chr das erste Zeichen eines Strings zurück. Es ist immer noch in 2.0 und 2.1 verfügbar.
"Smith".chr #=> "S"
In der MRT 1.8.7 oder höher:
'foobarbaz'.each_char.first
Versuche dies:
>> a = "Smith"
>> a[0]
=> "S"
ODER
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]
würde den ganzzahligen Wert des Zeichens 'S' zurückgeben. Beide Versionen gehorchen "Smith"[0,1] == "S"
.
"Smith"[0] == ?S
dies sowohl für Ruby 1.8 als auch für 1.9 gilt
Aufgrund einer nervigen Designauswahl in Ruby vor 1.9 - some_string[0]
gibt den Zeichencode des ersten Zeichens zurück - ist die portabelste Methode, dies zu schreiben some_string[0,1]
, die Anweisung, eine Teilzeichenfolge bei Index 0 zu erhalten, die 1 Zeichen lang ist.
Sie können auch verwenden truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
oder für zusätzliche Formatierung:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
Jede dieser Methoden funktioniert:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.
nach name
. Und der letzte ist unsinnig, selbst wenn Sie den entfernen .
, weil er zwei verschiedene Methoden verwendet, um dasselbe zu tun - [0]
und chr()
.
'Smith'.first