I am new to ruby and currently trying to operate on each character separately from a base String in ruby. I am using ruby 1.8.6 and would like to do something like:
"ABCDEFG".each_char do |i| puts i end
This produces a undefined method `each_char' error.
I was expecting to see a vertical output of:
A B C D ..etc
Is the each_char
method defined only for 1.9? I tried using the plain each
method, but the block simply ouputs the entire string in one line. The only way I figure how to do this, which is rather inconvenient is to create an array of characters from the begining:
['A','B','C','D','...'].each do|i| puts i end
This outputs the desired:
A B C ..etc
Is there perhaps a way to achive this output using an unmodified string to begin with?
I think the Java equivalent is:
for (int i = 0; i < aString.length(); i++){ char currentChar = aString.charAt(i); System.out.println(currentChar); }
The each_char in Ruby is used to pass each character that makes a string to a block in Ruby. The block of each_char takes a single parameter which represents characters in a string.
Repeat a character or string N times in Ruby. In Ruby, when the * operator is used with a string on the left hand side and an integer on the right hand side (i.e. string * integer ), it repeats the string as many times as specified by the integer. For example: foo = "quack!" * 3 puts foo # output: "quack!
I have the same problem. I usually resort to String#split
:
"ABCDEFG".split("").each do |i| puts i end
I guess you could also implement it yourself like this:
class String def each_char self.split("").each { |i| yield i } end end
Edit: yet another alternative is String#each_byte
, available in Ruby 1.8.6, which returns the ASCII value of each char in an ASCII string:
"ABCDEFG".each_byte do |i| puts i.chr # Fixnum#chr converts any number to the ASCII char it represents end
Extending la_f0ka's comment, esp. if you also need the index position in your code, you should be able to do
s = 'ABCDEFG' for pos in 0...s.length puts s[pos].chr end
The .chr
is important as Ruby < 1.9 returns the code of the character at that position instead of a substring of one character at that position.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With