1.8. Przetwarzanie kolejnych znaków łańcucha

Problem

Należy wykonać pewną czynność w stosunku do każdego znaku łańcucha z osobna.

Rozwiązanie

W dokumencie złożonym wyłącznie ze znaków ASCII każdy bajt łańcucha odpowiada jednemu znakowi. Za pomocą metody String#each_byte można wyodrębnić poszczególne bajty jako liczby, które następnie mogą być skonwertowane na znaki.

'foobar'.each_byte { |x| puts "#{x} = #{x.chr}" }
# 102 = f
# 111 = o
# 111 = o
# 98 = b
# 97 = a
# 114 = r

Za pomocą metody String#scan można wyodrębnić poszczególne znaki łańcucha jako jednoznakowe łańcuchy:

'foobar'.scan( /./ ) { |c| puts c }
# f
# o
# o
# b
# a
# r

Dyskusja

Ponieważ łańcuch jest sekwencją bajtów, można by oczekiwać, że metoda String#each umożliwia ...

Get Ruby. Receptury now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.