17

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.

7 Answers 7

15

Or you can convert the integer to its character value:

a[0].chr
Sign up to request clarification or add additional context in comments.

Comments

7

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

Comments

6

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

Comments

5

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?

Comments

2

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.

Comments

1

@Chris,

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

Check out the String API.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.