Као што можда већ знате, жице Руби су оно што је познато као првокласни објекти који користе бројне методе за упите и манипулацију.
Једна од најосновнијих стринг манипулација Акција је поделити низ у више под стрингова. То би се урадило, на пример, ако имате сличан низ"фоо, бар, баз" и желите три струне "фоо", "бар" и "баз". Тхе разделити метода класе Стринг то може постићи за вас.
Основна употреба "Сплита"
Најосновнија употреба разделити метода је поделити низ на основу једног знака или статичког низа знакова. Ако је први аргумент сплит-а низ, онда се знакови у том низу користе као раздвајач стрингова, док се у подацима разграниченим зарезом зарез користи за одвајање података.
#! / уср / бин / енв рубин
стр = "фоо, бар, баз"
ставља стр.сплит (",")
$ ./1.рб
фоо
бар
баз
Додајте флексибилност регуларним изразима
Постоје лакши начини за њихово разграничење низ. Кориштење правилног израза као разграничитеља чини сплит методу много флексибилнијим.
Опет узмимо за пример стринг "фоо, бар, баз". Након првог зареза постоји размак, али не и после другог. Ако се низ "", користи као разграничник, на почетку низа "бар" ће и даље бити размака. Ако се користи низ "," (са размаком након зареза), он ће одговарати само првом зарезу јер други зарез нема размака након њега. Веома је ограничавајући.
Решење овог проблема је употреба регуларног израза као аргумента разграничења уместо низа. Редовни изрази вам омогућавају да упоређујете не само статичке низове знакова, већ и неодређени број знакова и необавезна слова.
Писање регуларних израза
Када пишете регуларни израз за свој разграничник, први корак је описати речима шта је раздвајач. У овом случају, фраза "зарез који може да прати један или више размака" је разумна.
Постоје два елемента у овом регеку: зарез и опционални размаци. Размаци ће користити кванфикатор * (звезда или звездица), што значи „нула или више“. Било који елемент који претходи томе подудараће се са нулом или више пута. На пример, регек /a*/ ће одговарати низу нула или више знакова 'а'.
#! / уср / бин / енв рубин
стр = "фоо, бар, баз"
ставља стр.сплит (/, * /)
$ ./2.рб
фоо
бар
баз
Ограничавање броја одвојености
Замислите низ знакова одвојен зарезом као што је "10,20,30, ово је произвољни низ". Овај формат је три броја, а затим ступац за коментаре. Овај ступац за коментаре може садржавати произвољни текст, укључујући текст са зарезима у њему. За спречавање разделити од цепања текста ове колоне, можемо подесити максимални број ступаца за поделу.
Белешка: Ово ће функционисати само ако је низ коментара с произвољним текстом последњи ступац табеле.
Да бисте ограничили број делића, сплит метода ће се извршити, проследите број поља у низу као други аргумент методу сплит, овако:
#! / уср / бин / енв рубин
стр = "10,20,30, десет, двадесет и тридесет"
ставља стр.сплит (/, * /, 4)
$ ./3.рб
10
20
30
Десет, двадесет и тридесет
Пример бонуса!
Шта ако желите да употребите разделити да узмете све предмете осим првог?
Заправо је врло једноставно:
прво, * рест = ек.сплит (/, /)
Познавање ограничења
Метода поделе има неколико прилично великих ограничења.
Узмимо за пример стринг '10, 20, "Боб, Ева и Маллори", 30 '. Намјера је два броја, након чега слиједи цитирани низ (који може садржавати зарезе), а затим још један број. Сплит не може тачно одвојити овај низ у поља.
Да би се то постигло, потребно је да буде стринг скенер државнички, што значи да се може сетити да ли се налази унутар цитираног низа или не. Дељени скенер није изванредан па не може да реши проблеме попут овог.