String Formatting in Ruby

Ruby offers excellent support for string formatting. Here are some examples of common string formatting tasks.

# Define a Point class
Point = Struct.new(:x, :y)

# Main execution
p = Point.new(1, 2)

# Ruby offers several formatting methods for various data types
# For structs, use inspect or to_s
puts "struct1: #{p}"
puts "struct2: #{p.inspect}"

# To print the type of a value, use class
puts "type: #{p.class}"

# Formatting booleans
puts "bool: #{true}"

# There are many options for formatting integers
# Use to_s for standard base-10 formatting
puts "int: #{123}"

# This prints a binary representation
puts "bin: #{14.to_s(2)}"

# This prints the character corresponding to the given integer
puts "char: #{33.chr}"

# Use to_s(16) for hex encoding
puts "hex: #{456.to_s(16)}"

# For basic decimal formatting of floats, use sprintf or format
puts "float1: #{sprintf("%.6f", 78.9)}"

# Use sprintf with %e for scientific notation
puts "float2: #{sprintf("%e", 123400000.0)}"
puts "float3: #{sprintf("%E", 123400000.0)}"

# For basic string printing
puts "str1: #{'"string"'}"

# To include quotes, use %q
puts "str2: #{%q("string")}"

# Use unpack for hex representation of a string
puts "str3: #{"hex this".unpack('H*')[0]}"

# To print a representation of an object's id, use object_id
puts "pointer: #{p.object_id}"

# When formatting numbers you can control the width and precision
puts "width1: |#{sprintf("%6d%6d", 12, 345)}|"

# You can also specify the width of printed floats
puts "width2: |#{sprintf("%6.2f%6.2f", 1.2, 3.45)}|"

# To left-justify, use the - flag
puts "width3: |#{sprintf("%-6.2f%-6.2f", 1.2, 3.45)}|"

# For strings, use sprintf for width control
puts "width4: |#{sprintf("%6s%6s", "foo", "b")}|"

# To left-justify strings, use the - flag
puts "width5: |#{sprintf("%-6s%-6s", "foo", "b")}|"

# Ruby's equivalent of Sprintf is format
s = format("sprintf: a %s", "string")
puts s

# You can format and print to IO objects other than STDOUT
require 'stringio'
io = StringIO.new
io.puts format("io: an %s", "error")
puts io.string

Ruby’s string formatting capabilities are quite versatile. The sprintf method (and its alias format) provides printf-style formatting, while string interpolation offers a more Ruby-like approach. The % operator can also be used for formatting, similar to sprintf.

To run this program, save it as string_formatting.rb and use:

$ ruby string_formatting.rb

This will output the formatted strings, demonstrating various formatting options available in Ruby.

Next, we’ll explore more advanced Ruby concepts and features.