Como posso obter o primeiro caractere em uma string usando Ruby?
No final das contas, o que estou fazendo é pegar o sobrenome de alguém e apenas criar uma inicial a partir dele.
Então, se a string for "Smith", eu só quero "S".
"Smith".chr #=> "S"
Como posso obter o primeiro caractere em uma string usando Ruby?
No final das contas, o que estou fazendo é pegar o sobrenome de alguém e apenas criar uma inicial a partir dele.
Então, se a string for "Smith", eu só quero "S".
"Smith".chr #=> "S"
Respostas:
Você pode usar as classes abertas do Ruby para tornar seu código muito mais legível. Por exemplo, este:
class String
def initial
self[0,1]
end
end
permitirá que você use o initial
método em qualquer string. Portanto, se você tiver as seguintes variáveis:
last_name = "Smith"
first_name = "John"
Então você pode obter as iniciais de forma clara e legível:
puts first_name.initial # prints J
puts last_name.initial # prints S
O outro método mencionado aqui não funciona no Ruby 1.8 (não que você deva usar mais o 1.8 de qualquer maneira! - mas quando esta resposta foi postada, ainda era bastante comum):
puts 'Smith'[0] # prints 83
Claro, se você não estiver fazendo isso regularmente, definir o método pode ser um exagero e você pode simplesmente fazer isso diretamente:
puts last_name[0,1]
Se você usar uma versão recente do Ruby (1.9.0 ou posterior), o seguinte deve funcionar:
'Smith'[0] # => 'S'
Se você usar 1.9.0+ ou 1.8.7, o seguinte deve funcionar:
'Smith'.chars.first # => 'S'
Se você usar uma versão anterior a 1.8.7, isso deve funcionar:
'Smith'.split(//).first # => 'S'
Note-se que 'Smith'[0,1]
se não trabalhar em 1.8, ele vai não dar-lhe o primeiro caractere, ele só irá dar-lhe o primeiro byte .
"Smith"[0]
retornaria o valor inteiro do caractere 'S'. Ambas as versões obedecem "Smith"[0,1] == "S"
.
"Smith"[0,1]
funciona no 1.8 (assumindo ASCII). Não sei por que você presume tanto sobre o solicitante, bem como sobre todos os outros que gostariam de aprender com essa pergunta. Por exemplo, o Mac OS X vem com Ruby 1.8, portanto, nenhuma instalação é necessária para esses usuários.
"Smith"[0..0]
funciona em Ruby 1.8 e Ruby 1.9.
Para completar, uma vez que Ruby 1.9 String # chr retorna o primeiro caractere de uma string. Ainda está disponível em 2.0 e 2.1.
"Smith".chr #=> "S"
Em MRI 1.8.7 ou superior:
'foobarbaz'.each_char.first
Experimente isto:
>> a = "Smith"
>> a[0]
=> "S"
OU
>> "Smith".chr
#=> "S"
>> s = 'Smith'
=> "Smith"
>> s[0]
=> "S"
"Smith"[0]
retornaria o valor inteiro do caractere 'S'. Ambas as versões obedecem "Smith"[0,1] == "S"
.
"Smith"[0] == ?S
é verdade tanto no Ruby 1.8 quanto no 1.9
Por causa de uma escolha de design irritante em Ruby antes de 1.9 - some_string[0]
retorna o código de caractere do primeiro caractere - a maneira mais portátil de escrever isso é some_string[0,1]
, o que o informa para obter uma substring no índice 0 com 1 caractere de comprimento.
Você também pode usar truncate
> 'Smith'.truncate(1, omission: '')
#=> "S"
ou para formatação adicional:
> 'Smith'.truncate(4)
#=> "S..."
> 'Smith'.truncate(2, omission: '.')
#=> "S."
Qualquer um desses métodos funcionará:
name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S
.
depois name
. E o último não faz sentido, mesmo se você remover o .
, porque está usando dois métodos diferentes para fazer a mesma coisa - [0]
e chr()
.
'Smith'.first