Question

In Ruby, trying to print out the individual elements of a String is giving me trouble. Instead of seeing each character, I'm seeing their ASCII values instead:

>> a = "0123"
=> "0123"
>> a[0]
=> 48

I've looked online but can't find any way to get the original "0" back out of it. I'm a little new to Ruby to I know it has to be something simple but I just can't seem to find it.

Was it helpful?

Solution

Or you can convert the integer to its character value:

a[0].chr

OTHER TIPS

You want a[0,1] instead of a[0].

I believe this is changing in Ruby 1.9 such that "asdf"[2] yields "d" rather than the character code

To summarize:

This behavior will be going away in version 1.9, in which the character itself is returned, but in previous versions, trying to reference a single character of a string by its character position will return its character value (so "ABC"[2] returns 67)

There are a number of methods that return a range of characters from a string (see the Ruby docs on the String slice method) All of the following return "C":

"ABC"[2,1] 
"ABC"[2..2]
"ABC".slice(2,1)

I find the range selector to be the easiest to read. Can anyone speak to whether it is less efficient?

@Chris,

That's just how [] and [,] are defined for the String class.

Check out the String API.

The [,] operator returns a string back to you, it is a substring operator, where as the [] operator returns the character which ruby treats as a number when printing it out.

I think each_char or chars describes better what you want.

irb(main):001:0> a = "0123"
=> "0123"
irb(main):002:0> Array(a.each_char)
=> ["0", "1", "2", "3"]
irb(main):003:0> puts Array(a.each_char)
0
1
2
3
=> nil
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top