ham-capのブログ

プログラミング学習の記録

【Ruby】まだ空白文字で表示位置調整してるの?(文字列を右寄せにします)

もくじ

文字列の表示位置を空白文字で調整するととてもブサイク

ターミナル上にとある文字列を出力させるコマンドを作っていた時、画面左端からちょっとスペースを空けて表示させたいから先頭に空白文字を挿入して無理やり右に押し出すようにしていました。(以下は文字列の先頭に空白文字を4つ挿入。)

puts "    foo"

するとこんな感じに表示される。

f:id:ham-cap:20210710082035p:plain

表示させる文字列が完全に分かっていてかつ一行ならまぁ最悪これでもいいかなと思わなくもないけれど、例えばfooの部分を変数にして毎回文字数が変わるような場合、文字数の増減によって文字列の右端が伸び縮みするので、別の文字列や変数が右側に書かれていた日には表示位置が不規則に変化してしまいます。

そして何より、コード内の文字列に明らかに位置調整のためだけの空白文字が大量に書かれているととてもブサイクです。(個人の感想です)

今回はこういう場合に使えるメソッドについて書いてみます。

rjustメソッド

結論から言うとStringクラスのrjustメソッドを使うと解決します。 いつもどおりリファレンスマニュアルを読んでみます。

rjust(width, padding = ' ') -> String

長さ width の文字列に self を右詰めした文字列を返します。 self の長さが width より長い時には元の文字列の複製を返します。また、第 2 引数 padding を指定したときは空白文字の代わりに padding を詰めます。

docs.ruby-lang.org

微妙に言い回しが分かりにくいので以下で説明します。

最大幅を決める

考え方としては引数widthの部分で表示させたい最大の幅を決めて、その幅の中でレシーバの文字列が右寄せになります。

例えば、冒頭で書いたような先頭に空白文字4つ分のスペースを空けて表示させたい場合で、仮に文字列本体の最大の長さが6文字だとすると、rjustで設定するwidthは10になります。

puts "foobar".rjust(10) # => "    foobar"

空白文字以外も使える

このメソッドでは文字列を最大幅の中で右寄せにして、余ったスペースに空白文字を詰め込むというのがデフォルトの挙動ですが、マニュアルにも記載があるとおり第2引数に指定した文字列で余ったスペースを埋めることもできます。 例えば、

"foo".rjust(10, "*") # => "*******foo"

こんな感じで*で埋めたり、

"foo".rjust(8, "(^o^)") # => (^o^)foo

おじさんっぽい顔文字を挿入して文字列を鬱陶しくすることも思いのままです。fooって言ってるっぽくてめちゃくちゃイライラします。

まとめ

正直、なんとなくこういうメソッドがあるのはう〜っすら知っていたのですが使い所がよく分かりませんでした。 でも何かしら必要に迫られて改めて出会うとなんて親切なメソッドなんだとちょっと感動したので、結局は使い手次第というか、適材適所というか、僕が未熟だっただけですサーセン

今回はこんな感じです。

記載内容に間違い等があった場合にはこっそり教えていただければ幸いです。

最後までお読みいただきありがとうございました。