Ruby: Comment obtenir le premier caractère d’une chaîne

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 quelqu’un et en créer une première.

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 Ssortingng 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 très proprement et lisiblement:

 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 (ce n’est pas que vous devriez utiliser 1.8 de toute façon! – mais quand cette réponse a été postée, c’était encore assez courant):

 puts 'Smith'[0] # prints 83 

Bien sûr, si vous ne le faites pas régulièrement, la définition de la méthode peut être excessive 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 éléments suivants devraient fonctionner:

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

Si vous utilisez 1.9.0+ ou 1.8.7, les éléments suivants 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 1.8, il ne vous donnera pas le premier caractère, il ne vous donnera que le premier octet .

 "Smith"[0..0] 

travaille à la fois ruby ​​1.8 et ruby ​​1.9.

Pour être complet, puisque Ruby 1.9 Ssortingng # chr renvoie le premier caractère d’une chaîne. Il est toujours disponible en 2.0 et 2.1.

 "Smith".chr #=> "S" 

http://ruby-doc.org/core-1.9.3/Ssortingng.html#method-i-chr

En IRM 1.8.7 ou supérieur:

 '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 agaçant dans Ruby avant 1.9 – some_ssortingng[0] renvoie le code de caractère du premier caractère – le moyen le plus portable d’écrire ceci est some_ssortingng[0,1] , qui lui dit d’obtenir une sous-chaîne à l’index 0 1 caractère de long.

Chacune 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 

Une autre option qui n’a pas encore été mentionnée:

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