Разделить строку, подавляя все пустые поля

Я хочу разбить строку, подавляя все пустые поля

Команда:

",1,2,,3,4,,".split(',')

Результат:

["", "1", "2", "", "3", "4", ""]

Ожидаемый:

["1", "2", "3", "4"]

Как это сделать?


Редактировать

Хорошо. Просто чтобы подвести итог всем заданным хорошим вопросам.

Я хотел, чтобы метод разделения (или другой метод) не генерировал пустые строки. Похоже, это невозможно.

Итак, решение - двухэтапный процесс: разделить строку как обычно, а затем каким-то образом удалить пустые строки из результирующего массива.

Вторая часть точно этот вопрос (и его дубликат )

Поэтому я бы использовал

",1,2,,3,4,,".split(',').delete_if(&:empty?) 

Решение, предложенное Никитой Рыбак и пользователем 229426, заключается в использовании метода отклонения. Согласно docs reject возвращает новый массив. Хотя метод delete_if более эффективен, поскольку мне не нужна копия. Использование select , предложенное Марком Байерсом, еще более неэффективно.

steenslag предложил заменить запятые пробелом, а затем использовать разделение пробелом:

",1,2,,3,4,,".gsub(',', ' ').split(' ')

На самом деле документация говорит, что пространство есть на самом деле пустое пространство. Но результаты «split (/ \ s /)» и «split ('')» не совпадают. Почему?

Марк Байерс предложил другое решение - просто используя регулярные выражения. Похоже, это то, что мне нужно. Но это решение подразумевает, что вы должны быть мастером регулярного выражения. Но это отличное решение! Например, если мне нужны пробелы в качестве разделителей, а также любой не буквенно-цифровой символ, я могу переписать это в

",1,2, ,3 3,4 4 4,,".scan(/\w+[\s*\w*]*/)

, результат будет:

["1", "2", "3 3", "4 4 4"]

Но опять же, регулярные выражения очень неинтуитивны, и они требуют опыта.

Резюме

Я ожидаю, что это разделение будет работать с пробелами, как если бы они были запятыми или даже регулярным выражением. Я ожидаю, что это не приведет к созданию пустых строк. Я думаю, что это ошибка в ruby ​​или мое недоразумение.

Сделал это вопросом сообщества.

8
задан 5 revs 23 May 2017 в 10:30
поделиться