問題
以下の要件を満たすxyz_thereメソッドを実装しましょう。
任意の文字列から連続する文字列"xyz"を探し、その直前にピリオド(.)がない場合はTrueを出力する
任意の文字列から連続する文字列"xyz"を探し、その直前にピリオド(.)がある場合はFalseを出力する
上記2つの条件に当てはまらない場合はFalseを出力する
def xyz_there(str)
# 処理を記述
end
# 呼び出し例
xyz_there('abcxyz')
出力例
xyz_there('abcxyz') → True
xyz_there('abc.xyz') → False
xyz_there('xyz.abc') → True
xyz_there('azbycx') → False
xyz_there('a.zbycx') → False
私の回答
def xyz_there(str)
if str.include?(".xyz")
puts "False"
elsif str.include?("xyz")
puts "True"
else
puts "False"
end
end
# 呼び出し例
xyz_there('abcxyz')
解説
まずif文でinclude?メソッドを使い".xyz"がstrに含まれているかどうか判断します。
次に"xyz"を同じように判断します。
判断する順番に気をつけて処理を記述しました。
模範回答
def xyz_there(str)
if str.include?(".xyz")
puts "False"
elsif str.include?("xyz")
puts "True"
else
puts "False"
end
end
# 呼び出し例
xyz_there('abcxyz')
模範解説
include?を用いて、対象となる文字列が含まれているかどうかを、各条件式で判別しています。
ポイントとしては、str.include?(".xyz")の条件式をstr.include?("xyz")より前に設置することです。
例えば"abc.xyz"という文字列の場合は、str.include?("xyz")においてもtrueとなってしまうため、先に".xyz"を含むかどうかを判別する必要があります。
感じたこと
今回使用したinclude?メソッドは一度学習したことがあったので覚えていた。
文字列判断の順番で処理結果がおかしくなるので、if文設定の場合はしっかりと順番を考えて記述していきたい。
アドバイスやご指摘等ございましたらぜひお願いします!!
以上