Kā izmantot rubīna metodi "Sadalīt"

Kā jūs jau varat zināt, stīgas iekšā Rubīns ir tie, kas ir zināmi kā pirmās klases objekti kas izmanto vairākas metodes vaicājumiem un manipulācijām.

Viens no elementārākajiem manipulācijas ar stīgu darbības ir virknes sadalīšana vairākās apakšvirzēs. Tas tiktu darīts, piemēram, ja jums ir virkne, piemēram"foo, bar, baz" un jūs vēlaties trīs virknes “foo”, “bar” un “baz”. sadalīt Stīgu klases metode to var paveikt jūsu labā.

Pamata “Split” lietojums

Visvienkāršākais lietojums sadalīt metode ir virknes sadalīšana, pamatojoties uz vienu rakstzīmi vai statisku rakstzīmju secību. Ja pirmais sadalījuma arguments ir virkne, šīs virknes rakstzīmes tiek izmantotas kā virknes atdalītāja atdalītājs, turpretim komatatdalītos datos komatu izmanto, lai atdalītu datus.

#! / usr / bin / env rubīns
str = "foo, bar, baz"
ievieto str.split (",")
USD ./1.rb
foo
bārs
baz

Pievienojiet elastīgumu ar regulārajām izteiksmēm

Ir vieglāk veidi, kā norobežot virkne. Izmantojot regulāro izteiksmi kā norobežotāju, dalīšanas metode tiek padarīta daudz elastīgāka.

instagram viewer

Atkal ņem, piemēram, auklu "foo, bar, baz". Pēc pirmā komata ir atstarpe, bet ne pēc otrā. Ja virkne "," tiek izmantota kā norobežotājs, virknes "josla" sākumā joprojām būs atstarpe. Ja tiek izmantota virkne "," (ar atstarpi aiz komata), tā sakrīt tikai ar pirmo komatu, jo otrajā komatā aiz tās nav atstarpes. Tas ir ļoti ierobežojošs.

Šīs problēmas risinājums ir virknes vietā kā norobežotāja argumenta izmantot regulāru izteiksmi. Regulāri izteicieni ļauj saskaņot ne tikai statiskās rakstzīmju secības, bet arī nenoteiktu rakstzīmju skaitu un izvēles rakstzīmes.

Regulāro izteicienu rakstīšana

Rakstot atdalītāja regulāru izteiksmi, pirmais solis ir vārdos aprakstīt, kas ir atdalītājs. Šajā gadījumā frāze "komats, kam varētu sekot viena vai vairākas atstarpes" ir pamatota.

Šim regeksam ir divi elementi: komats un izvēles atstarpes. Atstarpes izmantos * (zvaigzne vai zvaigznīte) skaitli, kas nozīmē "nulle vai vairāk". Jebkurš elements pirms šī datuma sakrīt ar nulli vai vairāk reizes. Piemēram, regex /a*/ atbildīs ar nulles vai vairāk "a" rakstzīmju secību.

#! / usr / bin / env rubīns
str = "foo, bar, baz"
liek str.split (/, * /)
USD ./2.rb
foo
bārs
baz

Sadalījumu skaita ierobežošana

Iedomājieties komatu atdalītu vērtību virkni, piemēram "10,20,30, šī ir patvaļīga virkne". Šis formāts ir trīs cipari, kam seko komentāru kolonna. Šajā komentāru kolonnā var būt patvaļīgs teksts, ieskaitot tekstu ar komatiem tajā. Lai novērstu sadalīt sadalot šīs kolonnas tekstu, mēs varam iestatīt maksimālo sadalāmo kolonnu skaitu.

Piezīme: Tas darbosies tikai tad, ja komentāra virkne ar patvaļīgu tekstu būs tabulas pēdējā kolonna.

Lai ierobežotu sadalījumu skaitu, ko veiks sadalīšanas metode, kā otro argumentu nodaliet virknes lauku skaitu sadalīšanas metodei, piemēram:

#! / usr / bin / env rubīns
str = "10,20,30, desmit, divdesmit un trīsdesmit"
liek str.split (/, * /, 4)
USD ./3.rb
10
20
30
Desmit, divdesmit un trīsdesmit

Bonusa piemērs!

Ko darīt, ja vēlaties izmantot sadalīt saņemt visas mantas, bet pati pirmā?

Tas patiesībā ir ļoti vienkāršs:

vispirms * atpūta = ex.split (/, /)

Zinot ierobežojumus

Sadalīšanas metodei ir daži diezgan lieli ierobežojumi.

Ņem, piemēram, auklu '10, 20, "Bobs, Ieva un Maljorija", 30 '. Paredzēts divi skaitļi, kam seko citēta virkne (kurā var būt komati) un pēc tam vēl viens skaitlis. Sadalīt nevar pareizi atdalīt šo virkni laukos.

Lai to izdarītu, virkņu skenerim jābūt valstiski, kas nozīmē, ka tas var atcerēties, vai tas ir citātā virknē vai nē. Sadalītais skeneris nav valsts statuss, tāpēc tas nevar atrisināt tādas problēmas kā šī.