How to access individual characters in a string (as strings)


#1

I’m embarrassed to ask such a seeminly simple question, but I can’t
figure out how to “easily” get the individual characters/bytes out of a
string as strings. For example:

“abc”[0]

=> 97

“abc”[0…0]

=> “a”

The first form gives me the character as a Fixnum, but I want a string.
The second form gives me what I want but it seems ugly. Is there a
better way to get at a given character, as a string ?

Thanks for any and all help!

Justin


#2

m4dc4p wrote:

The second form gives me what I want but it seems ugly. Is there a
better way to get at a given character, as a string ?

There’s no good way. In future Ruby, you’ll get strings anyway
instead of Fixnums.

I usually use the [n…n] approach, but you can also do something
like: str[n].chr if you like that better.

Hal


#3

m4dc4p removed_email_address@domain.invalid wrote:

“abc”[0]

=> 97

“abc”[0,1] ???


#4

What are you doing withe the strings next?

You might want to have a look at StringScanner.


#5

On Friday 06 January 2006 03:03 am, m4dc4p wrote:

The second form gives me what I want but it seems ugly. Is there a
better way to get at a given character, as a string ?

Thanks for any and all help!

Lots of different ways, some of which are enumerated here:

http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm#_Arrays

and here:

http://www.troubleshooters.cxm/codecorn/ruby/basictutorial.htm#_Strings

You can use a lot of the same methods on both Arrays and Strings.

SteveT

Steve L.
http://www.troubleshooters.com
removed_email_address@domain.invalid


#6

2006/1/6, Une bévue removed_email_address@domain.invalid:

m4dc4p removed_email_address@domain.invalid wrote:

“abc”[0]

=> 97

“abc”[0,1] ???

i agree, this looks a lot better to me than “abc”[0…0] does, and i’ve
always used this.


#7

Just a suggestion:

class String
def chr(index)
self[index…index]
end
end

s = "Ruby"
t s.chr(0), "R"
t s.chr(3), "y"
t s.chr(4), ""
t s.chr(-1), "y"
t s.chr(-4), "R"
t s.chr(-5), nil

But nothing beats s[0]=“R”, it’s much cleaner.

Christer