Подтвердить что ты не робот

Рубин разделен пробелами

Как я могу написать функцию Ruby, которая разбивает входные данные любым видом пробела и удаляет все пробелы из результата? Например, если вход

 aa bbb
cc    dd ee

Затем верните массив ["aa", "bbb", "cc", "dd", "ee"].

4b9b3361

Ответ 1

Для примера, который вы дали:

str.gsub(/\s+/m, ' ').strip.split(" ")

он возвращает:

["aa", "bbb", "cc", "dd", "ee"]

Значение кода:

/\s+/m - более сложная часть. \s означает пробел, поэтому \s+ означает одну или несколько пробелов. В части /m, m называется модификатором, в этом случае это означает, что многострочный, то есть посещение многих строк, а не только одного, которое является поведением по умолчанию. Таким образом, /\s+/m означает поиск последовательностей одного или нескольких пробелов.

gsub означает замену всех.

strip является эквивалентом trim на других языках и удаляет пробелы из фронта и конца строки.

Как, я писал объяснение, это может быть так, когда вы заканчиваете и заканчиваете символ конца или начала строки.

Чтобы быть в безопасности

Код может быть записан как:

str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")

Итак, если у вас есть:

str = "\n     aa bbb\n    cc    dd ee\n\n"

Затем вы получите:

["aa", "bbb", "cc", "dd", "ee"]

Значение нового кода:

^\s+ последовательность белых пробелов в начале строки

\s+$ последовательность белых пробелов в конце строки

So gsub(/^\s+|\s+$/m, '') означает удаление любой последовательности белого пробела в начале строки и в конце строки.

Ответ 2

Это поведение по умолчанию String#split:

input = <<-TEXT
 aa bbb
cc    dd ee
TEXT

input.split

Результат:

["aa", "bbb", "cc", "dd", "ee"]

Это работает во всех версиях Ruby, которые я тестировал, включая 1.8.7, 1.9.3, 2.0.0 и 2.1.2.

Ответ 3

input = <<X
     aa bbb
cc    dd ee
X

input.strip.split(/\s+/)

Ответ 4

Как небольшая модификация ответа Vidaica, в Ruby 2.1.1 он выглядит как

input.split(" ")

Будет компенсировать все пробелы, будь то пробелы, табуляции или символы новой строки, что дает:

["aa", "bbb", "cc", "dd", "ee"]

Ответ 5

input.split("\s")

Если вместо /\s/ используется "\s", белые будут удалены из результата.