Rubyのbytesliceメソッドで指定バイト分の文字列を返す方法【初心者向け】
初心者向けにRubyのbytesliceメソッドの使い方について解説しています。これによって文字列から任意の範囲分だけを返すことができます。指定の際に使うバイトという単位についての基本とbytesliceの使用例、実際のコードを見ていきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
今回はRubyのメソッド、bytesliceについて解説していきます。
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。
今回は、Rubyに関する内容だね!
どういう内容でしょうか?
bytesliceメソッドの使い方について詳しく説明していくね!
お願いします!
bytesliceとは
bytesliceは文字列をbyte単位で切り出すメソッドです。
byteって何?という疑問が当然湧いてくるかと思いますが、まずはどのような文字列を、どのように変換するかを説明します。
例えば、以下のように切り出すときに使います。
「本日は晴天なり、みなさん張り切って今日もプログラミングをしていきましょう。」 ↓ 「本日は晴天なり、みなさん張り切っ」
文字数をコンピューターに伝えるとき、byteという単位を用います。
byteとは
文字というのは実は文字コードと呼ばれる法則にのっとって、コンピューター上には表示されます。絵文字を入力すると稀に文字化けが起こったりしますよね。あれは絵文字が文字コード表に載っていないから、表示できないよ、という意味なのです。
文字はアルファベット、ひらがな、カタカナ、漢字だけでなく、キリル語やタガログ語など膨大にあります。
それを表示したり、保存するときに必要な容量の単位のことをbyteといいます。
全世界でよく使われるアルファベットや数字は1byteで表示できますが、日本語は2byteを使って表示しています。中には4byteを使ってやっと表示できるものもあります。(2byte以上使う文字のことをマルチバイトといいます。)
つまり単純に私たちがが文字数とはいっても、コンピューターは「byte数で指定してね」と要求してくるのです。
ちなみに2018年現在、プログラミングで使われている文字コードはUTF-8のみという認識で問題ありません。古いシステムだと他の文字コードが使われていることもあります。
bytesliceの書き方
bytesliceは切り出したい文字列オブジェクトが持つメソッドとなるので、下記のような書き方になります。
文字列オブジェクト.byteslice(取得したい文字列の開始バイト, 取得したい文字列の長さのbyte数)
実際に書いてみよう
文法がわかったところで実際に書いてみましょう。
"Ruby is the best programming language.".byteslice(0, 10) => "Ruby is th"
アルファベットやスペースは1byteで表示できますので、上記のように10文字切り出せます。ちなみに開始位置が文頭の場合、1ではなくて0と書くことに注意してください。
"Ruby is the best programming language.".byteslice(0, 10) + "..." => "Ruby is th..."
こんなふうに…をつければ、よく見かける長い文章を略したような表記をさせることができます。
次は日本語を含んだ文字を指定バイト数で切り出してみましょう。
"RubyはMatzの作った世界最強のプログラミング言語です。.".byteslice(0, 15) + "..." => "RubyはMatzのxE4..."
なにか変な文字が出ていますね。
アルファベットや数字は1byteで表示できると先程書きましたが、日本語は2byte使います。その日本語を途中で切り出してしまうと、上のようにコンピューターは認識できず文字化けを起こしてしまいます。
こんなのときに便利なのはRuby2.1から追加されたscrubというメソッドです。scrubは不正な文字をカットしてくれます。
"RubyはMatzの作った世界最強のプログラミング言語です。.".byteslice(0, 15).scrub('') + "..." => "RubyはMatzの..."
ちなみにRuby on Railsを使われている方はtruncateというこれらの文字化けや…をまとめて面倒見てくれる便利なメソッドがあります。
irbやpryなどでとりあえず使ってみたい方は、下記のようにActive Supportをrequireして使ってみましょう。
require "active_support/all" => true "RubyはMatzの作った世界最強のプログラミング言語です。.".truncate(15) => "RubyはMatzの作っ..."
みなさんbytesliceやtruncateを使って文字列を切り出してみましょう。
監修してくれたメンター
小原 幹康
小学生のときからプログラミングで遊んでいる31歳。 好きな言語:Ruby、Python、Go |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。