Rubyの文字列フォーマット入門:%演算子と書式指定子の使い方
この記事では、Rubyで文字列をフォーマットする方法について詳しく解説します。
なぜ文字列のフォーマットが必要なのでしょうか?例えば、10未満の数値にも先頭にゼロを付けて表示したい場合(01、02、03など)、あるいはコンソール出力を見やすいように桁を揃えて整形したい場合などが挙げられます。
他の言語ではprintf関数を使って文字列をフォーマットできます。C言語を使ったことがある人なら馴染み深いでしょう。printfでは、書式指定子(フォーマット指定子)のリストと、変数や値のリストを定義して使用します。
Rubyでの文字列フォーマットの基本
Rubyでもsprintfメソッドが利用可能ですが、この記事ではより慣用的な書き方である「%演算子」を使った方法を紹介します。
基本的な使い方:%d で整数を埋め込む
実際のコード例:
time = 5 message = "Processing of the data has finished in %d seconds" % [time] puts message
出力 => "Processing of the data has finished in 5 seconds"
この例では、%dが書式指定子であり、timeがフォーマットしたい変数です。%dは整数のみを出力する指定子です。
%f で小数点数を扱う
浮動小数点数を表示したい場合は%fを使用します。小数点以下の桁数を指定することもでき、その場合は%0.2fのように記述します。
ここで2は、小数点以下2桁まで表示することを意味します。
実際のコード例:
score = 78.5431 puts "The average is %0.2f" % [score]
出力 => The average is 78.54
なお、数値は四捨五入されることに注意してください。例えば、上の例で78.549を指定した場合、出力は78.55になります。
数値の変換とパディング(ゼロ埋め)
%x で16進数に変換する
10進数を16進数に変換して表示することもできます。%xフォーマットを使用します:
puts "122 in HEX is %x" % [122]
出力 => 122 in HEX is 7a
先頭をゼロで埋める
数値の先頭に任意の個数の0を埋めたい場合は、%0<ゼロの個数>dという形式を使用します。
puts "The number is %04d" % [20]
出力 => The number is 0020
テキストを桁揃えして表形式に整える
このRubyの文字列フォーマットのテクニックを使えば、整列したカラム(列)を持つテキストを作成することもできます。0の代わりにダッシュ(-)を指定すると、左寄せ+スペース埋めの効果が得られます。
また、Stringクラスの.ljustメソッドと.rjustメソッドを使っても同じことが実現できます。
例:
names_with_ages = [["john", 20], ["peter", 30], ["david", 40], ["angel", 24]]
names_with_ages.each { |name, age| puts name.ljust(10) + age.to_s }
# 出力結果(綺麗に整列した表になります)
john 20
david 30
peter 40
angel 24
.ljust(10)は文字列の幅を10文字に固定し、足りない分を右側にスペースで埋めるメソッドです。これにより名前の長さが異なるデータでも、年齢の列がきれいに揃います。逆に右寄せしたい場合は.rjustを使います。
まとめ
見てきたように、RubyおよびRailsにおける文字列フォーマットは非常に簡単です。重要なのは、利用可能な各書式指定子(%d、%f、%xなど)の意味と使い方を理解することです。
%演算子によるフォーマットに加え、sprintfやformatメソッド、さらに.ljust・.rjustといったStringクラスのメソッドも組み合わせれば、コンソール出力やログ、レポート生成など様々な場面で読みやすい出力を実現できます。ぜひ実際のコードで試してみてください!
-
JavaScriptで文字列内のスペースの数を数える方法
JavaScriptでは、スペースを含む文字列を受け取り、その中に含まれるスペースの数を数える関数を作成する必要がある場面があります。ここでは、その実装方法を解説します。例として、以下のような入力文字列が与えられた場合を考えます。const str = this is a string;この場合、期待される出力は次のとおりです。const output = 4;forループを使った基本的な実装最もシンプルな方法は、文字列を1文字ずつ確認し、スペースが見つかるたびにカウントを増やすことです。 { let count = 0; for (let i = 0; i < str.length;
-
Pythonの文字列フォーマット徹底比較:%演算子とformat()メソッドの違い
%演算子の落とし穴:変数とタプルの扱いPythonの%演算子(printf形式のフォーマット)は、変数単体でもタプルでも受け取ることができます。その分、意図した動作をさせるためには、非常に明示的な書き方が求められます。コード例たとえば、次のようにタプルをそのまま渡してみます。my_tuple = (1, 2, 3) My tuple: %s % my_tuple多くの人は、このコードから次のような出力を期待するでしょう。My tuple: (1, 2, 3)実際の出力結果しかし、実際に実行すると TypeError が発生します。これは、Pythonがタプルの中身を複数のフォーマット引数として