Как да използвате метода "Разделяне" в Ruby

click fraud protection

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

Един от най-основните стринг манипулация действия е да разделите низ на няколко подреда. Това ще стане например, ако имате низ"foo, bar, baz" и искате трите струни "foo", "bar" и "baz". Най- разцепване методът от класа String може да постигне това вместо вас.

Основната употреба на "Сплит"

Най-основното използване на разцепване метод е да се раздели низ на базата на един символ или статична последователност от знаци. Ако първият аргумент на split е низ, знаците в този низ се използват като разделител на низове, докато в данни, ограничени със запетая, запетаята се използва за разделяне на данни.

#! / usr / bin / env рубин
str = "foo, bar, baz"
поставя str.split (",")
$ ./1.rb
Foo
бар
Баз

Добавете гъвкавост с регулярни изрази

Има по-лесни начини за разграничаване на низ. Използването на редовен израз като разделител прави метода на разделяне много по-гъвкав.

instagram viewer

Отново вземете например низ "foo, bar, baz". След първата запетая има интервал, но не и след втората. Ако низът "," се използва като разделител, в началото на низа "bar" ще остане интервал. Ако се използва низът "," (с интервал след запетаята), той ще съвпада само с първата запетая, тъй като втората запетая няма интервал след нея. Много е ограничаващо.

Решението на този проблем е да използвате редовен израз като аргумент на разделителя вместо низ. Редовните изрази ви позволяват да сравнявате не само статични поредици от знаци, но и неопределени числа от символи и незадължителни знаци.

Писане на регулярни изрази

Когато пишете редовен израз за вашия разделител, първата стъпка е да опишете с думи какъв е разделителят. В този случай фразата "запетая, която може да бъде последвана от едно или повече интервали" е разумна.

В този регекс има два елемента: запетаята и незадължителните интервали. Пробелите ще използват количественото число * (звезда или звездичка), което означава „нула или повече“. Всеки елемент, който предхожда това, ще съвпада с нула или повече пъти. Например, регексът /a*/ ще съответства на поредица от нула или повече символи "a".

#! / usr / bin / env рубин
str = "foo, bar, baz"
поставя str.split (/, * /)
$ ./2.rb
Foo
бар
Баз

Ограничаване на броя на разделителите

Представете си низ от стойности със запетая като „10,20,30, Това е произволен низ“. Този формат е три числа, последвани от колона за коментар. Тази колона за коментари може да съдържа произволен текст, включително текст със запетаи в него. За да се предотврати разцепване от разделянето на текста на тази колона, можем да зададем максимален брой колони за разделяне.

Забележка: Това ще работи само ако низът за коментар с произволния текст е последната колона на таблицата.

За да ограничите броя на разделенията, методът split ще се извърши, предайте броя на полетата в низа като втори аргумент на метода split, като този:

#! / usr / bin / env рубин
str = "10,20,30, десет, двадесет и тридесет"
поставя str.split (/, * /, 4)
$ ./3.rb
10
20
30
Десет, двадесет и тридесет

Пример за бонус!

Ами ако искате да използвате разцепване за да получите всички елементи, но най-първия?

Всъщност е много просто:

първо, * rest = ex.split (/, /)

Познаване на ограниченията

Методът за разделяне има някои доста големи ограничения.

Вземете например низ '10, 20, "Боб, Ева и Малори", 30 ". Предвижда се две числа, последвани от цитиран низ (който може да съдържа запетаи) и след това друго число. Сплит не може правилно да раздели този низ на полета.

За да направите това, стринг скенерът трябва да бъде динамична защитна, което означава, че може да запомни дали е вътре в цитиран низ или не. Сплит-скенерът не е състоятелен, така че не може да реши проблеми като този.

instagram story viewer