【Ruby】文字列を任意の文字数で分割する方法

ruby-on-rails

こんにちは。たなか(@tanaka_ricecake)です。

Ruby on RailsでWebアプリケーションサービスの開発をしています。

Rubyでバッチ処理を作成していて、「文字列を2文字ずつ分割して配列化したいな」というシチュエーションに遭遇しました。

その際に用いた「文字列を任意の文字数で分割する」方法についてご紹介しようと思います。

Rubyで文字列を任意の文字数で分割する方法

やりたいこと

"143000"

上記のような文字列を……

["14", "30", "00"]

のように2文字ずつに変換したいです。

rubyのscanメソッドを使う!

Rubyの「scan」メソッドを利用することで解決できると考えました。

scanメソッドは、引数で指定した正規表現のパターンとマッチする部分を文字列からすべて取り出し、配列にして返します。

マッチする部分がなければ、空の配列を返します。

具体的には以下のように記述します。

a = "143000"

a.scan(/.{1,#{2}}/)

上記のようにscanメソッドを利用してやると、元の6桁の文字列を、2文字ずつの配列に変換することができました!

「2」の部分を変更することで、「何文字ずつ区切るか」を指定することができます。

scanでの文字列分割について、もうちょっと詳しく

正規表現では「.」が改行を除く任意の1文字 として扱われます。

{}の中で「それを何回繰り返すか」という数を指定しています。

今回のケースでは「1回以上最大2回」のため、 .{1,#{2}}  といった書き方になりました。難しいですね正規表現。

1文字ずつの文字列分割の場合は、spritも使えます

splitメソッドは、引数patternを区切り文字として文字列を分割し、配列を返します。

引数の指定のしかたによってさまざまな分割ができます。分割できなかったときは、要素が文字列1つだけの配列を返します。

任意の文字数ではなく単に1文字ずつ分割したいという場合はspritメソッドも使えたりします。

str = "1234567890" 
str.split(//) 

上記で叩くと……

=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]

文字列が1文字ずつ分割されました!


2019/09/21 追記

1文字ずつの文字列分割の場合は、charsメソッドも簡単でいい感じです

charsメソッドは、文字列中の文字を繰り返し取り出します。

ブロック引数charに1文字を入れながら、文字数だけブロックを繰り返します。戻り値はレシーバ自身です。

str = "1234567890"
str.chars
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]

spritよりもシンプルに書けていい感じですね。

1文字ずつの文字列分割ならこれで良さそうです!

Rubyで文字列を任意の文字数で分割する方法 まとめ

ruby-on-rails

今回はRubyで「文字列を任意の文字数で分割する方法」についてご紹介しました。。

こういう「やりたいことは分かっているけど、メソッドや書き方がわからない!」みたいな時って調べる単語めっちゃ重要ですよね。

今回は「Ruby 文字列 分割 文字数」みたいなキーワードで調査したため、比較的早くやりたいことにたどり着けましたが、言葉が全然出てこないときがままあります……。

上手に検索するのもエンジニアのスキルかと思うので、目標に対する言語化みたいなところも育てていく必要ありですね。

短いですが、今回はここまで。

参考サイト

 

コメントを残す

メールアドレスが公開されることはありません。