web-dev-qa-db-ja.com

文字列を分割して空白をスキップする方法は?

" This is a test "のような文字列があります。文字列をスペース文字で分割したい。私はこのようにします:

puts " This   is a test ".strip.each(' ') {|s| puts s.strip}

結果は次のとおりです。

この

です
a
テスト
これはテストです

最後の行"This is a test"があるのはなぜですか?また、2つの単語の間に2つ以上のスペース文字がある場合、これが「行」を返さないようにする必要があります。

単語を特定の文字列に分割したいだけです。
誰かアイデアがありますか?

12
Tim
irb(main):002:0> " This   is a test ".split
=> ["This", "is", "a", "test"]

irb(main):016:0* puts " This   is a test ".split
This
is
a
test

str.split(pattern = $;、[limit] > anArray)==

Patternを省略した場合、$の値;使用されている。 $の場合; nil(デフォルト)の場合、strは `’が指定されているかのように空白で分割されます。

41
YOU

やったほうがいい

" This   is a test ".strip.each(' ') {|s| puts s.strip}

最後の「これはテストです」が必要ない場合

なぜなら

irb>>> puts " This   is a test ".strip.each(' ') {}
This   is a test
2
marcgg

各ブロックが実行された後、最初のコマンド「puts」はputになります。最初の「プット」を省略すれば完了です

1