ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます。
#splitメソッド
指定した文字列で分割し、それを配列で返すメソッドです。
基本構文は、
"文字列".split(区切り文字, 分割数)
論より証拠ということで、実際にコードを見ていきましょう
'Yamada, Satou, Itou, Suzuki'.split(',')
=> ["Yamada", " Satou", " Itou", " Suzuki"]
'Yamada, Satou, Itou, Suzuki'.split('u')
=> ["Yamada, Sato", ", Ito", ", S", "z", "ki"]
1個目の例でいえば、対象の文字列には、「,」があるので、,を目印に区切っていくメソッドなんですね
2個目の例でいえば、「u」を目印に文字列を区切っていくようなメソッドです。
##分割数の指定
分割数を指定することもできます。
'Yamada, Satou, Itou, Suzuki'.split(',', 2)
=> ["Yamada", " Satou, Itou, Suzuki"]
'Yamada, Satou, Itou, Suzuki'.split('u', 2)
=> ["Yamada, Sato", ", Itou, Suzuki"]
また、分割数を制限することもできるんです。
'Yamada, Satou, Itou, Suzuki'.split(',').first
=> "Yamada"
##正規表現とも組み合わせることが可能
'Yamada, Satou, Itou, Suzuki'.split(/[a | u ]/)
=> ["Y", "m", "d", ",", "S", "to", ",", "Ito", ",", "S", "z", "ki"]
正規表現に関しては、こちらのサイトを参照してみてください!
##1バイトの空白文字がある場合
1バイトの空白文字とは、文字列の半角スペースのことをいいます。
この場合、その文字列の先頭と末尾の空白文字を除いてくれて、さらに、空白文字に一致する部分で分割します。
補足でいうと、改行(\n)、タブ(\t)、nilも対象になります。
'Yama da Sat ou It ou Su zuki'.split(' ')
=> ["Yama", "da", "Sat", "ou", "It", "ou", "Su", "zuki"]
##今回の問題の正解
()で囲われたものを含んだ結果を返すんですね。なので、
["Apple", "-", "Banana", "-", "Lemon"]
が正解ですね
ちなみに、以下のようにすると答えはまた変わりますね
p "Apple-Banana-Lemon".split('-')
=> ["Apple", "Banana", "Lemon"]
#類似メソッド
##String#partitionメソッド
[最初のセパレータより前の部分, セパレータ, それ以降の部分] の 3 要素の配列を返します。 by公式ドキュメント
セパレータって何?って方は、こちらの記事を読んでみてください
要は、[最初にヒットした場所より前の場所、最初にヒットした場所、それ以降の部分]ってことです。
実際にコードを見ていきましょう
p 'Ishida Keisuke'.partition('s')
=> ["I", "s", "hida Keisuke"]
p 'Ishida Keisuke'.partition('x')
=> ["Ishida Keisuke", "", ""]
ヒットしなかった場合は、第2要素、第3要素は空文字になる。
あまり、partitionメソッドは使われていないような気がしますね
今回はこの辺で終わりにします!
何か間違いがございましたら、ご教示いただけますと幸いです。
【参考文献】