Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

StringIO#eachには、FSっぽい感じで文字列を切り分ける機能がある

SringIOは標準添付でありながら、あんまり使われる所を見かけないライブラリ*1です。
これは文字列にIOクラスの挙動を持たせる便利なものです。

このクラスのうち、StringIO#eachはちょっと特別な挙動をします。
引数に切り分け文字を指定してあげると、それに則って切り出してくれるのです。
FSみたいなもんですね。

実際のところ

StringIO.new("str_hoge_fuga").each("_").to_a

とやると、

[
    [0] "str_",
    [1] "hoge_",
    [2] "fuga"
]

てな回答が返ってきます。

文字列切り出しまわり

str
#"sample\nstring\n\n\nthis\nis\na\npen\n\nas you like\n"

てな文字列があったとします。
この時、eachになにも指定しなければ行ごとの切り出しです。

StringIO.new(str).each.to_a
[
    [0] "sample\n",
    [1] "string\n",
    [2] "\n",
    [3] "\n",
    [4] "this\n",
    [5] "is\n",
    [6] "a\n",
    [7] "pen\n",
    [8] "\n",
    [9] "as you like\n"
]

一方、空文字列を指定してあげると……センテンス区切りになります。

StringIO.new(str).each("").to_a
[
    [0] "sample\nstring\n\n",
    [1] "this\nis\na\npen\n\n",
    [2] "as you like\n"
]

*1:あくまで個人的感想