Используйте регулярное выражение:
str = 'hello this is a hello, allright this is a hello.'
str.split(/[.,\s]+/)
# => ["hello", "this", "is", "a", "hello", "allright", "this", "is", "a", "hello"]
Это позволяет вам разбить строку на любой из трех запрошенных вами разделителей.
Стоп и запятая говорят сами за себя, а \s
относится к пробелу. +
означает, что мы сопоставляем один или несколько из них, и означает, что мы избегаем пустых строк в случае 2+ из этих символов в последовательности.
Вам может пригодиться объяснение, предоставленное Regex101, которое можно найти здесь: https://regex101.com/r/r4M7KQ/3.
Редактировать: для бонусных баллов, вот хороший способ подсчитать количество слов, используя each_with_object
:)
str.split(/[.,\s]+/).each_with_object(Hash.new(0)) { |word, counter| counter[word] += 1 }
# => {"hello"=>3, "this"=>2, "is"=>2, "a"=>2, "allright"=>1}