나는 루비를 처음 접했고 현재 루비의 기본 문자열과는 별도로 각 캐릭터에 대해 작업을 시도하고 있습니다. 루비 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_byte
Ruby 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
는 .chr
1.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