Hvordan bruke "Split" -metoden i Ruby

click fraud protection

Som du kanskje allerede vet, strenger du inn Rubin er det som er kjent som førsteklasses objekter som bruker en rekke metoder for spørsmål og manipulasjon.

Noe av det mest grunnleggende strengmanipulering handlinger er å dele en streng i flere understrenger. Dette vil for eksempel gjøres hvis du har en streng som"foo, bar, baz" og du vil ha de tre strengene "foo", "bar" og "baz". De dele metoden til String-klassen kan oppnå dette for deg.

Den grunnleggende bruken av "Split"

Den mest grunnleggende bruken av dele metoden er å dele en streng basert på et enkelt tegn eller statisk tegnrekke. Hvis splitts første argument er en streng, brukes tegnene i den strengen som en strengseparatoravgrenser, mens i kommaavgrenset data brukes kommaet til å skille data.

#! / usr / bin / env ruby
str = "foo, bar, baz"
setter str.split (",")
$ ./1.rb
foo
Bar
baz

Legg til fleksibilitet med vanlige uttrykk

Det er enklere måter å avgrense string. Å bruke et vanlig uttrykk som avgrenser gjør delingsmetoden mye mer fleksibel.

instagram viewer

Igjen, ta for eksempel strengen "foo, bar, baz". Det er et mellomrom etter den første komma, men ikke etter den andre. Hvis strengen "," brukes som en avgrenser, vil det fortsatt være et mellomrom i begynnelsen av "søylen" -strengen. Hvis strengen "," brukes (med et mellomrom etter komma), vil den bare samsvare med det første komma ettersom det andre komma ikke har et mellomrom etter det. Det er veldig begrensende.

Løsningen på dette problemet er å bruke et vanlig uttrykk som begrensningsargument i stedet for en streng. Vanlige uttrykk lar deg matche ikke bare statiske sekvenser av tegn, men også ubestemme antall tegn og valgfrie tegn.

Skrive vanlige uttrykk

Når du skriver et vanlig uttrykk for avgrenseren, er det første trinnet å beskrive med ord hva avgrenseren er. I dette tilfellet er uttrykket "et komma som kan følges av ett eller flere mellomrom" rimelig.

Det er to elementer i denne regexen: komma og valgfrie mellomrom. Avstandene vil bruke * (stjerne eller stjerne) kvantifiserer, som betyr "null eller mer." Ethvert element som går foran dette vil matche null eller flere ganger. For eksempel regex /a*/ vil matche en sekvens på null eller flere 'a' tegn.

#! / usr / bin / env ruby
str = "foo, bar, baz"
setter str.split (/, * /)
$ ./2.rb
foo
Bar
baz

Begrense antall splitter

Se for deg en komma-separert verdistreng som "10,20,30, dette er en vilkårlig streng". Dette formatet er tre tall etterfulgt av en kommentarspalte. Denne kommentarspalten kan inneholde vilkårlig tekst, inkludert tekst med komma i den. Å forhindre dele fra å dele opp teksten i denne kolonnen, kan vi stille inn et maksimalt antall kolonner som skal deles.

Merk: Dette vil bare fungere hvis kommentarstrengen med den vilkårlige teksten er den siste kolonnen i tabellen.

For å begrense antall delinger den delte metoden vil utføre, passerer du antall felt i strengen som et andre argument til delingsmetoden, slik:

#! / usr / bin / env ruby
str = "10,20,30, ti, tjue og tretti"
setter str.split (/, * /, 4)
$ ./3.rb
10
20
30
Ti, tjue og tretti

Bonuseksempel!

Hva om du ville bruke dele å få alle varene, men den aller første?

Det er faktisk veldig enkelt:

først, * hvile = ex.split (/, /)

Å kjenne til begrensningene

Delingsmetoden har noen ganske store begrensninger.

Ta for eksempel strengen '10, 20, 'Bob, Eve and Mallory', 30 '. Det som er ment er to tall, etterfulgt av en sitert streng (som kan inneholde komma) og deretter et annet nummer. Deling kan ikke skille denne strengen riktig i felt.

For å gjøre dette, må strengskanneren være det stateful, noe som betyr at den kan huske om den er inne i en sitert streng eller ikke. Den delte skanneren er ikke tilstrekkelig, så den kan ikke løse problemer som denne.

instagram story viewer