こんにちは。
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](https://tanarizm.com/wp-content/uploads/2019/07/ruby-on-rails.jpg)
今回はRubyで「文字列を任意の文字数で分割する方法」についてご紹介しました。。
こういう「やりたいことは分かっているけど、メソッドや書き方がわからない!」みたいな時って調べる単語めっちゃ重要ですよね。
今回は「Ruby 文字列 分割 文字数」みたいなキーワードで調査したため、比較的早くやりたいことにたどり着けましたが、言葉が全然出てこないときがままあります……。
上手に検索するのもエンジニアのスキルかと思うので、目標に対する言語化みたいなところも育てていく必要ありですね。
短いですが、今回はここまで。