ルビーコードを考えると:
"aaaa\nbbbb\n\n".split(/\n/)
これは以下を出力します:
["aaaa", "bbbb"]
で示される空白行を出力に含め\n\n
たい - 結果を次のようにしたい:
["aaaa", "bbbb", ""]
この正確な結果を得る最も簡単で最良の方法は何ですか?
このタスクlines
の代わりに使用することをお勧めします。末尾の改行が保持されるため、目的の空行を確認できます。クリーンアップに使用:split
lines
chomp
"aaaa\nbbbb\n\n".lines.map(&:chomp)
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
他の、より複雑な、そこに到達する方法は次のとおりです。
"aaaa\nbbbb\n\n".split(/(\n)/).each_slice(2).map{ |ary| ary.join.chomp }
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
でキャプチャ グループを使用することを利用してsplit
います。これは、間にあるテキストが分割された状態で分割テキストを返します。each_slice
次に、要素を 2 要素のサブ配列にグループ化します。map
2 要素の各サブ配列を取得し、 のjoin
後に を実行しchomp
ます。
または:
"aaaa\nbbbb\n\n".split(/(\n)/).delete_if{ |e| e == "\n" }
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
split
返されるものは次のとおりです。
"aaaa\nbbbb\n\n".split(/(\n)/)
[
[0] "aaaa",
[1] "\n",
[2] "bbbb",
[3] "\n",
[4] "",
[5] "\n"
]
あまり頻繁に使用されることはありませんが、便利な場合があります。
split の 2 番目のパラメーターに負の引数を指定して、末尾の空の文字列が削除されないようにすることができます。
"aaaa\nbbbb\n\n".split(/\n/, -1)
これにより、必要なものと比較して、余分な空の文字列が1つ得られることに注意してください。
数値引数を使用できますが、(IMO) 私が期待するものと完全に一致していないため、IMO は少しトリッキーです。AFAICT では、最後の null フィールドをトリミングする必要があります。
jruby-1.6.7 :020 > "aaaa\nbbbb\n\n".split(/\n/, -1)[0..-2]
=> ["aaaa", "bbbb", ""]