学習したことのアウトプットとして
メソッドの引数に、任意の2つの文字列を指定し、引数に指定された2つの文字列のうち、どちらかがもう一方の文字列の末尾にある場合はTrueを、満たせていない場合はFalseを出力するend_otherメソッドを実装する。
この時、入力された文字が大文字でも小文字でも、同一の文字として処理を行う。
例えば、"abc"と"HiAbc"の文字列を引数とした場合、"HiAbc"の末尾に"abc"という文字が存在しているのでTrueと出力される。
使用するメソッド
downcase
大文字を小文字に変換するメソッド
# 大文字を含んだ文字列を定義
irb(main):001:0> name = "Hiabc"
=> "Hiabc"
# downcaseメソッドを使用し、小文字に変換
irb(main):002:0> name.downcase
=> “hiabc”
slice
文字列から指定した要素を取り出すことができるメソッド
負の数を指定すると末尾からカウントしてくれる
こちらでもう少し詳しく記事にしてます→Stringクラスのsliceメソッド
array = "Hiabc"
#配列番号(インデックス番号)の-3から-1の範囲の文字列を切り取る
array.slice(-3..-1)
#=> abc
模範解答
def end_other(a, b)
a_down = a.downcase
b_down = b.downcase
a_len = a_down.length
b_len = b_down.length
if b_down.slice(-(a_len)..- 1) == a_down || a_down.slice(-(b_len)..- 1) == b_down
puts "True"
else
puts "False"
end
end
解説
2〜5行目
a_down = a.downcase #aの文字列を小文字に変換して代入
b_down = b.downcase #bの文字列を小文字に変換して代入
a_len = a_down.length #aの文字数を代入
b_len = b_down.length #bの文字数を代入
6行目
b_down.slice(-(a_len)..- 1) == a_down || a_down.slice(-(b_len)..- 1) == b_down
左辺の条件は「bの文字列の末尾〜(aの文字数)分の文字がaの文字列と等しい」かどうか、右辺はその逆。
この二つを「||(または)」の論理演算子を用いて条件付けしている。
あとは条件分岐で出力するものを分ける、といった感じ。
問題はともかく、使用したメソッドがどんなものなのかは覚えておきたいところ
※補足等ございましたらコメントいただけると幸いです。