【Ruby】特定の文字をカウントするメソッド
概要
下記の問題が出された際、間違ったため備忘録として残します。
【問題】
任意の文字列がいくつあるか数えてその数を出力するメソッドを作成して下さい
私の回答
私は下記のような回答をしてしまいました。
※ちなみに、間違いです
def count_hi(word)
puts word.count('hi')
end
word = "hi!hideyuki. hidemi."
count_hi(word)
本来は「3」が正解ですが、上記記述だと「8」となってしまいます
正解
Ruby
def count_hi(word)
puts word.scan('hi').length
end
word = "hi!hideyuki. hidemi."
count_hi(word)
def count_hi(word)
puts word.scan('hi').length
end
word = "hi!hideyuki. hidemi."
count_hi(word)
上記、記述だと「8」と表示されます
解説
countは"hi"ではなく、"h","i"それぞれの個数をカウントしてしまいます。
scanはマッチした部分文字列の配列を返します。
そのため、lengthが無いと下記のような表示となります。
puts word.scah('hi')
# hi hi hi と表示されます
lengthは本来は文字列の文字数を返しますが、word.scan('hi').lengthとすることで、scanで返された配列をカウントすることとなります。
参考
特定の文字の出現回数をカウントする - Ruby Tips!
String#count (Ruby 2.7.0 リファレンスマニュアル) - Ruby-lang
String#scan (Ruby 2.7.0 リファレンスマニュアル) - Ruby-lang
String#length (Ruby 2.7.0 リファレンスマニュアル) - Ruby-lang
Author And Source
この問題について(【Ruby】特定の文字をカウントするメソッド), 我々は、より多くの情報をここで見つけました https://qiita.com/kazuko___3o3___/items/1f1963bb40d2606d32bd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .