Comment puis-je obtenir le premier caractère d'une chaîne en utilisant Ruby?
En fin de compte, ce que je fais, c'est prendre le nom de famille de quelqu'un et créer simplement une initiale.
Donc, si la chaîne était "Smith", je veux juste "S".
Vous pouvez utiliser les classes ouvertes de Ruby pour rendre votre code beaucoup plus lisible. Par exemple, ceci:
class String
def initial
self[0,1]
end
end
vous permettra d'utiliser la méthode initial
sur n'importe quelle chaîne. Donc, si vous avez les variables suivantes:
last_name = "Smith"
first_name = "John"
Ensuite, vous pouvez obtenir les initiales de manière très propre et lisible:
puts first_name.initial # prints J
puts last_name.initial # prints S
L'autre méthode mentionnée ici ne fonctionne pas sur Ruby 1.8 (vous ne devriez plus utiliser la version 1.8 de toute façon! - mais lorsque cette réponse a été publiée, elle était encore courante):
puts 'Smith'[0] # prints 83
Bien sûr, si vous ne le faites pas régulièrement, définir la méthode risque d’être excessif et vous pouvez le faire directement:
puts last_name[0,1]
Si vous utilisez une version récente de Ruby (1.9.0 ou version ultérieure), les opérations suivantes devraient fonctionner:
'Smith'[0] # => 'S'
Si vous utilisez 1.9.0+ ou 1.8.7, les opérations suivantes devraient fonctionner:
'Smith'.chars.first # => 'S'
Si vous utilisez une version antérieure à 1.8.7, cela devrait fonctionner:
'Smith'.split(//).first # => 'S'
Notez que 'Smith'[0,1]
ne fonctionne pas sur la version 1.8, il ne fonctionnera pas vous donne le premier caractère, il ne vous donnera que le premier octet .
"Smith"[0..0]
fonctionne à la fois dans Ruby 1.8 et Ruby 1.9.
Pour être complet, puisque Ruby 1.9 String # chr renvoie le premier caractère d'une chaîne. Il est toujours disponible en 2.0 et 2.1.
"Smith".chr #=> "S"
En IRM 1.8.7 ou plus:
'foobarbaz'.each_char.first
Dans les rails
name = 'Smith'
name.first
Essaye ça:
>> a = "Smith"
>> a[0]
=> "S"
OU
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
En raison d'un choix de conception ennuyeux dans Ruby avant 1.9 - some_string[0]
renvoie le code caractère du premier caractère - le moyen le plus portable de l'écrire est some_string[0,1]
, qui lui indique d'obtenir une sous-chaîne d'un index de 0 caractères.
Une autre option qui n'a pas encore été mentionnée:
> "Smith".slice(0)
#=> "S"
N'importe laquelle de ces méthodes fonctionnera:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S