Как вы уже знаете, строки в Рубин это то, что известно как первоклассные объекты которые используют ряд методов для запросов и манипуляций.
Один из самых основных манипуляции со струнами действие состоит в том, чтобы разбить строку на несколько подстрок. Это будет сделано, например, если у вас есть строка вроде"Фу, бар, баз" и вы хотите три строки "foo", "bar" и "baz". Трещина метод класса String может сделать это за вас.
Основное использование "Сплит"
Основное использование Трещина Метод заключается в разделении строки на основе одного символа или статической последовательности символов. Если первым аргументом split является строка, символы в этой строке используются в качестве разделителя строк, тогда как в данных с разделителями-запятыми запятая используется для разделения данных.
#! / usr / bin / env ruby
str = "foo, bar, baz"
ставит str.split (",")
$ ./1.rb
Foo
бар
Baz
Добавьте гибкость с регулярными выражениями
Есть более простые способы разграничения строка. Использование регулярного выражения в качестве разделителя делает метод разбиения более гибким.
Опять возьмем для примера строку "Фу, бар, баз". Пробел после первой запятой, но не после второй. Если строка «,» используется в качестве разделителя, пробел все еще будет существовать в начале строки «bar». Если используется строка «,» (с пробелом после запятой), она будет соответствовать только первой запятой, так как вторая запятая не имеет пробела после нее. Это очень ограничивает.
Решением этой проблемы является использование регулярного выражения в качестве аргумента разделителя вместо строки. Регулярные выражения позволяют сопоставлять не только статические последовательности символов, но также неопределенное количество символов и необязательных символов.
Написание регулярных выражений
При написании регулярного выражения для вашего разделителя, первый шаг - описать словами, что такое разделитель. В этом случае фраза «запятая, за которой может следовать один или несколько пробелов» является разумной.
В этом регулярном выражении есть два элемента: запятая и необязательные пробелы. Пробелы будут использовать квантификатор * (звездочка или звездочка), что означает «ноль или более». Любой элемент, который предшествует этому, будет соответствовать нулю или более раз. Например, регулярное выражение /a*/ будет соответствовать последовательности из нуля или более символов «а».
#! / usr / bin / env ruby
str = "foo, bar, baz"
ставит str.split (/, * /)
$ ./2.rb
Foo
бар
Baz
Ограничение количества сплитов
Представьте строку значений через запятую, такую как «10,20,30, это произвольная строка». Этот формат состоит из трех чисел, за которыми следует столбец комментариев. Этот столбец комментариев может содержать произвольный текст, включая текст с запятыми в нем. Предотвращать Трещина от разделения текста этого столбца, мы можем установить максимальное количество столбцов для разделения.
Замечания: Это будет работать только в том случае, если строка комментария с произвольным текстом является последним столбцом таблицы.
Чтобы ограничить количество разбиений, которые будет выполнять метод split, передайте количество полей в строке в качестве второго аргумента методу split, например:
#! / usr / bin / env ruby
str = "10,20,30, десять, двадцать и тридцать"
ставит str.split (/, * /, 4)
$ ./3.rb
10
20
30
Десять, двадцать и тридцать
Бонус Пример!
Что делать, если вы хотите использовать Трещина получить все предметы, кроме самого первого?
Это на самом деле очень просто:
во-первых, * rest = ex.split (/, /)
Зная ограничения
Сплит метод имеет некоторые довольно большие ограничения.
Возьмите, например, строку '10, 20, "Боб, Ева и Мэллори", 30 '. Предполагается два числа, за которыми следует строка в кавычках (которая может содержать запятые), а затем еще одно число. Split не может правильно разделить эту строку на поля.
Чтобы сделать это, сканер строк должен быть Stateful, это означает, что он может помнить, находится ли он внутри строки в кавычках или нет. Сплит-сканер не имеет состояния, поэтому он не может решить такие проблемы, как эта.