web-dev-qa-db-fra.com

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 famille de quelqu'un et créer simplement une initiale.

Donc, si la chaîne était "Smith", je veux juste "S".

100
Shpigford

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] 
118
iconoclast

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 .

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

fonctionne à la fois dans Ruby 1.8 et Ruby 1.9.

27
Andrew Grimm

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"

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

21
Brandon

En IRM 1.8.7 ou plus:

'foobarbaz'.each_char.first
14
Wayne Conrad

Dans les rails

name = 'Smith'
name.first 
11
Suganya

Essaye ça:

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

OU

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

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.

2
Chuck

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

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

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