Коментара

Дељење струна у Руби помоћу методе стринг # сплит

Дељење струна у Руби помоћу методе стринг # сплит

Ако унос корисника није једна реч или број, тај унос ће бити потребно поделити или претворити у листу низова или бројева.

На пример, ако програм тражи ваше пуно име, укључујући средњу почетну, прво ће га морати поделити у три одвојена низа пре него што може да ради са вашим именом, средњим и презименом. То се постиже коришћењем Стринг # сплит метод.

Како функционише стринг # сплит

У свом најосновнијем облику, Стринг # сплит узима један аргумент: раздјелник поља као низ. Овај раздјелник ће бити уклоњен са излаза и вратит ће се низ низова подијељених на раздјелник.

Дакле, у следећем примеру, под претпоставком да корисник правилно унесе своје име, требало би да добијете три елемента Арраи од раскола.

#! / уср / бин / енв рубин
штампа "Које је твоје пуно име?"
фулл_наме = гет.цхомп
наме = фулл_наме.сплит (")
ставља "Ваше име је # {наме.фирст}"
ставља „Ваше презиме # # наме.ласт}“

Ако покренемо овај програм и унесемо име, постићи ћемо очекиване резултате. Такође, имајте на уму то прво име и презиме су случајности. Тхе име променљива ће бити ан Арраии та два позива позива ће бити еквивалентна наме0 и наме-1 редом.

$ руби сплит.рб
Које је твоје име и презиме? Мицхаел Ц. Морин
Ваше име је Мицхаел
Ваше презиме је Морин

Међутим,Стринг # сплит је мало паметнији него што бисте мислили. Ако је аргумент за Стринг # сплит је низ, заиста то користи као разграничник, али ако је аргумент низ са једним размаком (као што смо користили), онда закључује да желите да се поделите на било коју количину белог простора и да такође желите да уклоните било који водећи бели простор.

Дакле, ако бисмо му дали мало неисправно стање попут

Мицхаел Ц. Морин

(са додатним размацима), затим Стринг # сплит и даље би урадила оно што се очекује. Међутим, то је једини посебан случај када прођете Низ као први аргумент. Раздјелници регуларне експресије

Такође можете пренијети регуларни израз као први аргумент. Ево, Стринг # сплит постаје мало флексибилнији. Такође можемо да учинимо мало паметнијим код за поделу имена.

Не желимо период на крају средњег иницијалног. Знамо да је средњи иницијал, а база података не жели период тамо, па га можемо уклонити док се делимо. Када Стринг # сплит одговара регуларном изразу, то чини исту ствар као да се управо поклапа са разграничицом низа: извлачи га из излаза и дели га у том тренутку.

Дакле, можемо мало еволуирати наш пример:

$ цат сплит.рб
#! / уср / бин / енв рубин
штампа "Које је твоје пуно име?"
фулл_наме = гет.цхомп
наме = фулл_наме.сплит (/ .? с + /)
ставља "Ваше име је # {наме.фирст}"
ставља „Ваш средњи иницијал је # {наме1}“
ставља „Ваше презиме # # наме.ласт}“

Подразумевани раздвајач записа

Руби и није баш велик за "посебне променљиве" које можете наћи на језицима попут Перла, али Стринг # сплит да ли користите оно што морате бити свесни. Ово је подразумевана променљива сепаратора записа, такође позната као $;.

То је глобално, нешто што не видите често у Рубију, па ако га промените, могло би утицати на остале делове кода - само будите сигурни да ћете га вратити када завршите.

Међутим, све што користи ова променљива делује као задана вредност за први аргумент Стринг # сплит. Чини се да је ова променљива подразумевано постављена на нула. Међутим, ако Стринг # сплитПрви аргумент је нула, замениће га једним свемирским низом.

Раздјелници нулте дужине

Ако је раздјелник прешао на Стринг # сплит тада је низ нулте дужине или регуларни израз Стринг # сплит ће се понашати мало другачије. Уклониће ништа од првобитног низа и поделити на сваки знак. Ово у суштини претвара низ у низ једнаких дужина који садржи само низове с једним знаком, по један за сваки знак у низу.

Ово може бити корисно за понављање низа и коришћено је у пре-1.9.к и пре-1.8.7 (који подржава низ функција од 1.9.к) за понављање знакова у низу, не бринући о прекиду мулти- бајт Уницоде карактери. Међутим, ако стварно желите да поновите низ стрингова и користите 1.8.7 или 1.9.к, вероватно би требало да користите Стринг # евери_цхар уместо тога.

#! / уср / бин / енв рубин
стр = "Претворила ме у невт!"
стр.сплит ("). сваки до | ц |
ставља ц
крај

Ограничавање дужине враћеног низа

Па да се вратимо нашем примеру рашчлањивања имена, шта ако неко има размак у презимену? На пример, холандска презимена често могу почети са "ван" (што значи "од" или "од").

Ми стварно желимо само 3-елементни низ, тако да можемо користити други аргумент Стринг # сплит које смо до сада игнорисали. Очекује се да ће други аргумент бити а Фикнум. Ако је овај аргумент позитиван, у већини случајева биће испуњено много елемената. Дакле, у нашем случају, ми бисмо желели да донесемо 3 за овај аргумент.

#! / уср / бин / енв рубин
штампа "Које је твоје пуно име?"
фулл_наме = гет.цхомп
наме = фулл_наме.сплит (/ .? с + /, 3)
ставља "Ваше име је # {наме.фирст}"
ставља „Ваш средњи иницијал је # {наме1}“
ставља „Ваше презиме # # наме.ласт}“

Ако ово покренемо поново и дамо му холандско име, поступиће како се очекује.

$ руби сплит.рб
Које је твоје име и презиме? Винцент Виллем ван Гогх
Ваше име је Винцент
Ваш средњи иницијал је Виллем
Ваше презиме је Ван Гогх

Међутим, ако је овај аргумент негативан (било који негативан број), тада неће бити ограничење броја елемената у излазном пољу и било који крајњи разграничари ће се појавити као низови нулте дужине на крају матрице.

Ово је показано у овом ИРБ исечку:

: 001> "ово је, тест, ,,,,". Сплит (',', -1)
=> "ово", "је", "а", "тест", "", "", "", ""