Kuidas kasutada "Split" meetodit rubiinides

Nagu te juba teate, keerab keel sisse Rubiin on need, mida tuntakse esimese klassi objektid mis kasutavad päringute tegemiseks ja manipuleerimiseks mitmeid meetodeid.

Üks kõige elementaarsemaid nööriga manipuleerimine toimingud on stringi jagamine mitmeks alamstringiks. Seda tehtaks näiteks siis, kui teil on string nagu"foo, baar, baz" ja soovite kolme stringi "foo", "bar" ja "baz". lõhestatud Keelpillide meetodi abil saate selle teie jaoks teostada.

"Spliti" põhikasutus

Kõige elementaarsem kasutamine lõhestatud meetod on stringi tükeldamine ühe tähe või staatilise tähemärkide jada alusel. Kui jaotuse esimene argument on string, kasutatakse selle stringi märke stringi eraldaja eraldajana, komadega eraldatud andmetes kasutatakse koma eraldamiseks.

#! / usr / bin / env rubiin
str = "foo, bar, baz"
paneb str.split (",")
$ ./1.rb
foo
baar
baz

Lisage tavaliste avaldiste abil paindlikkust

Selle piiritlemiseks on lihtsamaid viise nöör. Regulaarlause kasutamine eraldajana muudab jagamismeetodi palju paindlikumaks.

instagram viewer

Võtke jällegi näiteks nöör "foo, baar, baz". Esimese koma järel on tühik, kuid mitte teise järel. Kui stringi "," kasutatakse eraldajana, jääb "riba" stringi alguses ikkagi tühik. Kui kasutatakse stringi "," (tühikuga pärast koma), vastab see ainult esimesele komale, kuna teisel koma ei ole tühikut pärast seda. See on väga piirav.

Selle probleemi lahendus on kasutada eraldusargumendina stringi asemel regulaaravaldist. Regulaarsed avaldised võimaldavad teil sobitada mitte ainult staatilisi tähemärkide jadasid, vaid ka määramatu arvu märkide ja valikuliste märkide arvu.

Regulaarsete avaldiste kirjutamine

Oma eraldajale regulaaravaldise kirjutamisel tuleb kõigepealt kirjeldada sõnadega, mis piiritleja on. Sel juhul on lause "koma, millele võib järgneda üks või mitu tühikut" mõistlik.

Sellel regexil on kaks elementi: koma ja valikulised tühikud. Tühikud kasutavad kvantifikaatorit * (täht või tärn), mis tähendab "null või rohkem". Kõik sellele eelnevad elemendid vastavad null või enam korda. Näiteks regex /a*/ sobib nullist või enamast a-tähemärgist koosneva jadaga.

#! / usr / bin / env rubiin
str = "foo, bar, baz"
paneb str.split (/, * /)
$ ./2.rb
foo
baar
baz

Lõhede arvu piiramine

Kujutage ette komaga eraldatud väärtusstringi, näiteks "10,20,30, see on suvaline string". See vorming on kolm numbrit, millele järgneb kommentaari veerg. See kommentaariveerg võib sisaldada suvalist teksti, sealhulgas komadega teksti. Ennetama lõhestatud alates selle veeru teksti poolitamisest saame määrata maksimaalse veergude arvu, mida jagada.

Märge: See töötab ainult siis, kui suvalise tekstiga kommentaarikeel on tabeli viimane veerg.

Jagunemismeetodi jagamiste arvu piiramiseks edastage stringi väljade arv teise argumendina jagamismeetodile, näiteks järgmiselt:

#! / usr / bin / env rubiin
str = "10,20,30, kümme, kakskümmend ja kolmkümmend"
paneb str.spliti (/, * /, 4)
$ ./3.rb
10
20
30
Kümme, kakskümmend ja kolmkümmend

Boonusnäide!

Mis siis, kui soovite kasutada lõhestatud saada kõik esemed peale kõige esimese?

See on tegelikult väga lihtne:

esimene, * ülejäänud = ex.split (/, /)

Piirangute tundmine

Jagamismeetodil on mõned üsna suured piirangud.

Võtke näiteks nöör '10, 20, "Bob, Eve ja Mallory", 30 '. Kavandatud on kaks numbrit, millele järgneb tsiteeritud string (mis võib sisaldada koma) ja siis veel üks number. Split ei saa seda stringi õigesti lahtriteks eraldada.

Selleks peab stringiskanner olema riiklik, mis tähendab, et ta mäletab, kas see on tsiteeritud stringi sees või mitte. Jagatud skanner pole olek, seega ei suuda see lahendada selliseid probleeme.

instagram story viewer