Encontrando # ocorrências de um caractere em uma string em Ruby


103

Estou procurando o método Ruby (1.9 ...) que pode me ajudar a encontrar o número de ocorrências de um caractere em uma string. Procuro todas as ocorrências, não apenas a primeira.

Por exemplo: "Melanie é noob" Existem duas ocorrências da letra 'a'. Qual seria o método Ruby que eu poderia usar para encontrar isso?

Tenho usado Ruby-doc.org como referência e o scanmétodo String: classchamou minha atenção. A formulação é um pouco difícil para mim entender, então eu realmente não entendo o conceito de scan.

Edit: Consegui resolver isso usando scan. Compartilhei em um vídeo como consegui isso.


2
Você quer o número de ocorrências ou os valores de índice das ocorrências na string? Saber quantas vezes é útil, mas normalmente a próxima pergunta é "onde estão?"
o Tin Man de

Respostas:


143

Se você quiser apenas o número de a's:

puts "Melanie is a noob".count('a')  #=> 2

Docs para mais detalhes.


18
Eu realmente gostei dessa resposta até que percebi que você apenas pegou a string da pergunta :-) Ainda assim, +1.
Hubro

porque não funciona com pontos? Exemplo "voyage.localhost.com" .count ('www.') => 2. Como pode ser isso?
Gediminas

12
@Gediminas countconta caracteres, não strings. "voyage.localhost.com" .count ('www.') é o mesmo que "voyage.localhost.com" .count ('w.') e como não há w's e dois pontos, o resultado é 2.
steenslag

2
Alguma chance de você adicionar um link para os documentos ?
Processo de Fundo Monica

2
Fiquei inicialmente bastante chocado com esta resposta, mas depois vi que Melanie usou o exemplo primeiro. Boa resposta!
AJFaraday

52

Este link de uma pergunta feita anteriormente deve ajudar a escanear uma string em Ruby

scan retorna todas as ocorrências de uma string em uma string como um array, então

"Melanie is a noob".scan(/a/)

retornará

["a","a"]

1
Esta é a resposta que eu procurava :)
Zippie,

3
scanfunciona com Strings simples também, então scan('a')pode ser usado também
Daniel Rikowski,

1

Consegui resolver isso passando uma corda por scan conforme mostrado em outra resposta.

Por exemplo:

string = 'This is an example'
puts string.count('e')

Saídas:

2

Também consegui extrair as ocorrências usando scan e passando um sting em vez de regex, o que varia ligeiramente de outra resposta, mas foi útil para evitar regex.

string = 'This is an example'
puts string.scan('e')

Saídas:

['e','e']

Eu explorei esses métodos ainda mais em um pequeno guia de vídeo que criei depois que descobri.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.