LoginSignup
1
1

More than 1 year has passed since last update.

[Ruby]downcaseとsliceメソッドの併用

Last updated at Posted at 2022-01-13

学習したことのアウトプットとして

メソッドの引数に、任意の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の文字列と等しい」かどうか、右辺はその逆。
この二つを「||(または)」の論理演算子を用いて条件付けしている。
あとは条件分岐で出力するものを分ける、といった感じ。
 
問題はともかく、使用したメソッドがどんなものなのかは覚えておきたいところ
 
 
※補足等ございましたらコメントいただけると幸いです。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1