DEV Community

Burdette Lamar
Burdette Lamar

Posted on

4 2

I Have a Ruby String ...

Sometimes I have a Ruby string, but I'd like to have something else that's based on the string.

Here are some code examples around that.

Some of these techniques would not be needed if I know exactly what's in the string, but sometimes I don't know. Example: parsing.

Everyone will know some of these techniques, and some may know all of them. But:

  • "People need to be reminded more often than they need to be instructed." -- Dr. Samuel Johnson

The examples are coded in the interactive Ruby Shell, irb.

Each example:

  • Shows a string.
  • Performs some operation on the string.
  • Shows the result.

I Have a Ruby String, But What I Want Is ...

A Class

s
# => "Hash"
c = Object.const_get(s)
# => Hash
c.class
# => Class
Enter fullscreen mode Exit fullscreen mode

An Instance of a Class

s
# => "Hash"
h = Object.const_get(s).new
# => {}
h.class
# => Hash
Enter fullscreen mode Exit fullscreen mode

A Symbol

This is easy.

s
# => "my string"
sym = s.to_sym
# => :"my string"
sym.class
# => Symbol
Enter fullscreen mode Exit fullscreen mode

Also:

s
# => "my string"
sym = s.intern
# => :"my string"
sym.class
# => Symbol
Enter fullscreen mode Exit fullscreen mode

An Integer

s
# => "100"
i = s.to_i
# => 100
i.class
# => Integer
Enter fullscreen mode Exit fullscreen mode

Interpreted in a different base:

s
# => "111"
i = s.to_i(2)
# => 7
i.class
# => Integer
Enter fullscreen mode Exit fullscreen mode

Interpreted as octal:

s
# => "0246"
o = s.oct
# => 166
o.class
# => Integer
Enter fullscreen mode Exit fullscreen mode

Interpreted as hexadecimal:

s
# => "0xdeadbeef"
h = s.hex
# => 3735928559
h.class
# => Integer
Enter fullscreen mode Exit fullscreen mode

A Float

s
# => "1.5"
f = s.to_f
# => 1.5
f.class
# => Float
Enter fullscreen mode Exit fullscreen mode

With an exponent:

s
# => "0.314159e1"
f = s.to_f
# => 3.14159
f.class
# => Float
Enter fullscreen mode Exit fullscreen mode

A Rational

s
# => "10/4"
r = s.to_r
# => (5/2)
r.class
# => Rational
Enter fullscreen mode Exit fullscreen mode

A Complex

s
# => "2+2i"
c = s.to_c
# => (2+2i)
c.class
# => Complex
Enter fullscreen mode Exit fullscreen mode

An Array of Bytes

s
# => "Do you feel lucky?"
b = s.bytes
# => [68, 111, 32, 121, 111, 117, 32, 102, 101, 101, 108, 32, 108, 117, 99, 107, 121, 63]
b.class
# => Array
Enter fullscreen mode Exit fullscreen mode

An Array of Characters

s
# => "Do you feel lucky?"
a = s.chars
# => ["D", "o", " ", "y", "o", "u", " ", "f", "e", "e", "l", " ", "l", "u", "c", "k", "y", "?"]
a.class
# => Array
Enter fullscreen mode Exit fullscreen mode

An Array of Codepoints

s
# => "Do you feel lucky?"
c = s.codepoints
# => [68, 111, 32, 121, 111, 117, 32, 102, 101, 101, 108, 32, 108, 117, 99, 107, 121, 63]
c.class
# => Array
Enter fullscreen mode Exit fullscreen mode

An Array of Lines

s
# => "Twas brillig, and the slithy toves\n      Did gyre and gimble in the wabe:\nAll mimsy were the borogoves,\n      And the mome raths outgrabe. \n"
l = s.lines
# => ["Twas brillig, and the slithy toves\n", "      Did gyre and gimble in the wabe:\n", "All mimsy were the borogoves,\n", "      And the mome raths outgrabe. \n"]
l.class
# => Array
Enter fullscreen mode Exit fullscreen mode

An Array From Split

s
# => "Twas brillig, and the slithy toves\n      Did gyre and gimble in the wabe:\nAll mimsy were the borogoves,\n      And the mome raths outgrabe. \n"
a = s.split("\n")
# => ["Twas brillig, and the slithy toves", "      Did gyre and gimble in the wabe:", "All mimsy were the borogoves,", "      And the mome raths outgrabe. "]
a.class
# => Array
Enter fullscreen mode Exit fullscreen mode

An Enumerator for the Bytes

s
# => "xyzzy"
enum = s.each_byte
# => #<Enumerator: "xyzzy":each_byte>
enum.class
# => Enumerator
enum.each do |b|
    p b
  end
120
121
122
122
121
# => "xyzzy"
Enter fullscreen mode Exit fullscreen mode

An Enumerator for the Characters

s
# => "xyzzy"
enum = s.each_char
# => #<Enumerator: "xyzzy":each_char>
enum.class
# => Enumerator
enum.each do |char|
    puts char
  end
x
y
z
z
y
# => "xyzzy"
Enter fullscreen mode Exit fullscreen mode

An Enumerator for the Codepoints

s
# => "xyzzy"
enum = s.codepoints
# => [120, 121, 122, 122, 121]
enum.class
# => Array
enum.each do |codepoint|
    puts codepoint
  end
120
121
122
122
121
# => [120, 121, 122, 122, 121]
Enter fullscreen mode Exit fullscreen mode

An Enumerator for the Lines

s
# => "Twas brillig, and the slithy toves\n      Did gyre and gimble in the wabe:\nAll mimsy were the borogoves,\n      And the mome raths outgrabe. \n"
enum = s.each_line
# => #<Enumerator: "Twas brillig, and the slithy toves\n      Did gyre and gimble in the wabe:\nAll mimsy were the borogoves,\n      And the mome raths outgrabe. \n":each_line>
enum.class
# => Enumerator
enum.each do |line|
    puts line
  end
Twas brillig, and the slithy toves
      Did gyre and gimble in the wabe:
All mimsy were the borogoves,
      And the mome raths outgrabe.
# => "Twas brillig, and the slithy toves\n      Did gyre and gimble in the wabe:\nAll mimsy were the borogoves,\n      And the mome raths outgrabe. \n"
Enter fullscreen mode Exit fullscreen mode

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay