まず前提として、この記事を書いているのは未経験からプログラミングに挑戦中の者になります。学習はフィヨルドブートキャンプに参加しながら取り組んでいて、現役のエンジニアの方からレビューをもらいながら進めています。 現在の学習状況は以下を随時更新しているので興味ある方はご覧ください。 そのため、学んだことを不定期に初学者向けにアウトプットしています。 今回はRubySilverの勉強をしていた際に、String#splitメソッドの引数で少し混乱した部分があったので、改めて確認しました。せっかく調べたことをブログ記事に残したいと思います。 Rubyの この例では、 また、 この例では、 これが、Rubyの 「このコードのうち、実行した結果が同じものを2つ選べ」という問題です。 普段コードを書いていて 引数を指定しない場合、 引数に正規表現または文字列を指定すると、そのパターンにマッチする部分で文字列を分割。 よってこの問題の回答は以下のようになります 結構、RubySilverの問題はメソッドの動きをしっかり理解していないと解けない絶妙なところを突いてくるので良い勉強になります! また混乱した部分があればアウトプットしていきたいと思います。はじめに
前提
String#splitの基本的な使い方
split
メソッドは、文字列を指定した区切り文字で分割するために使用されます。以下に基本的な使い方です。str = "apple,banana,grape"
arr = str.split(",") # => ["apple", "banana", "grape"]
split
メソッドは,
を区切り文字として文字列str
を分割し、結果として配列arr
が生成されます。区切り文字は文字列内の任意の箇所で指定できます。split
メソッドには2つ目の引数を渡すこともできます。この引数は、分割する部分の最大数を制限します。str = "apple,banana,grape,orange"
arr = str.split(",", 2) # => ["apple", "banana,grape,orange"]
,
を区切り文字として文字列str
を最大2つの部分に分割しています。split
メソッドの基本的な使い方です。今回混乱した問題はこちら
"a b c d".split()
"a\nb\nc\nd".split(//)
"a\tb\tc\td".split()
"a b c d".split(//)
\t
などのタブ文字を使ってこなかったので、回答に迷ってしまいました。引数なしの場合
split
メソッドは空白文字(スペース、タブ、改行など)で文字列を分割。連続する空白文字は一つの区切りと見なされる。"a b c d".split() # => ["a", "b", "c", "d"]
"a\tb\tc\td".split() # => ["a", "b", "c", "d"]
引数に正規表現または文字列を指定する場合
//
(空の正規表現)を引数にすると、文字列を1文字ずつの配列に分割。"a\nb\nc\nd".split(//) # => ["a", "\n", "b", "\n", "c", "\n", "d"]
"a b c d".split(//) # => ["a", " ", "b", " ", "c", " ", "d"]
紛らわしい挙動まとめ
split
を使うと自動的に空白文字(スペース、タブ、改行)で文字列を分割してくれる。//
を使用。問題の回答
irb(main):203:0> "a b c d".split()
=> ["a", "b", "c", "d"]
irb(main):204:0> "a\nb\nc\nd".split(//)
=> ["a", "\n", "b", "\n", "c", "\n", "d"]
irb(main):205:0> "a\tb\tc\td".split()
=> ["a", "b", "c", "d"]
irb(main):206:0> "a b c d".split(//)
=> ["a", " ", "b", " ", "c", " ", "d"]
さいごに