[ruby] 루비 1.8.6 (each_char)에서 문자열의 각 문자에 대해 반복

나는 루비를 처음 접했고 현재 루비의 기본 문자열과는 별도로 각 캐릭터에 대해 작업을 시도하고 있습니다. 루비 1.8.6을 사용하고 있으며 다음과 같은 작업을하고 싶습니다.

"ABCDEFG".each_char do |i|
  puts i
end

이것은 정의되지 않은 메소드`each_char ‘오류를 생성합니다.

나는 다음과 같은 수직 출력을 기대하고 있었다.

A
B
C
D
..etc

each_char메소드는 1.9에만 정의되어 있습니까? 평범한 each방법을 사용해 보았지만 블록은 단순히 전체 문자열을 한 줄로 출력합니다. 이 작업을 수행하는 방법을 알아내는 유일한 방법은 처음부터 문자 배열을 만드는 것입니다.

['A','B','C','D','...'].each do|i|
  puts i
end

그러면 원하는 결과가 출력됩니다.

A
B
C
..etc

수정되지 않은 문자열을 사용하여이 출력을 얻을 수있는 방법이 있습니까?

Java에 해당하는 것은 다음과 같습니다.

for (int i = 0; i < aString.length(); i++){
  char currentChar = aString.charAt(i);
  System.out.println(currentChar);
}



답변

나도 같은 문제를 안고있어. 나는 보통 다음에 의지한다 String#split:

"ABCDEFG".split("").each do |i|
  puts i
end

다음과 같이 직접 구현할 수도 있습니다.

class String
  def each_char
    self.split("").each { |i| yield i }
  end
end

편집 : 또 다른 대안은 String#each_byteRuby 1.8.6에서 사용할 수 있으며 ASCII 문자열에서 각 문자의 ASCII 값을 반환합니다.

"ABCDEFG".each_byte do |i|
  puts i.chr # Fixnum#chr converts any number to the ASCII char it represents
end


답변

la_f0ka의 설명 확장, esp. 코드에서 인덱스 위치도 필요하면 다음을 수행 할 수 있습니다.

s = 'ABCDEFG'
for pos in 0...s.length
    puts s[pos].chr
end

.chr1.9 <루비 중요하다 반환하는 위치에있는 문자의 코드 대신 그 위치에서 한 문자의 문자열 .


답변

1.8.6에 정말 문제가 있습니다. 이 에디션이 끝나면 괜찮아

1.8.6에서는 다음을 추가 할 수 있습니다.

requre 'jcode'


답변

하지만 이제 훨씬 더 많은 작업을 수행 할 수 있습니다.

a = "cruel world"

a.scan(/\w+/)        #=> ["cruel", "world"]

a.scan(/.../)        #=> ["cru", "el ", "wor"]

a.scan(/(...)/)      #=> [["cru"], ["el "], ["wor"]]

a.scan(/(..)(..)/)   #=> [["cr", "ue"], ["l ", "wo"]]


답변

"ABCDEFG".chars.each do |char|
  puts char
end

또한

"ABCDEFG".each_char {|char| p char}

Ruby 버전> 2.5.1


답변