2.2 Řetězce

Ahoj Kubo. Tak opět po čase jsem tu s dalším dílem tutoriálu pro tebe. Dneska – neboli v tomto tutoriálu si řekneme něco o řetězcích.

Co to vlastně takový řetězec (string) je? Je to jako klasický řetěz – kde co článek řetězu, to písmenko – jedno pěkně za druhým. Prostě – text :-) A protože je to objekt jako vše v ruby, ukážeme si, co všechno lze s takovým řetězcem dělat.

ruby-1.8.7-p174 > “Kuba”.class
=> String

Spojování

Řetězce můžeš spojovat zase jen s řezězci, na to nezapoměn. Nejde třeba spojovat řetězec s číslem – na to musíš nejdříve číslo převést na řetězec pomocí nějaké metody, třeba “to_s”

ruby-1.8.7-p174 > a = “v prasatku je ”
=> “v prasatku je ”
ruby-1.8.7-p174 > puts a + 1000.to_s + “korun”
v prasatku je 1000korun

Tak. To jsme spojili vlastně dva řetězce. Takže ted už víš, že se dají spojovat přes “+”. Můžeš je také spojovat přes “<<”

ruby-1.8.7-p174 > puts “ahoj” << ” kubo”
ahoj kubo

Násobení

Násobení řetězců? Snad čísel, ne? Nene, i řetězců. Kolikrát chceš něco vypsat hodněkrát, a buď si to spočítáš, nebo napíšeš cyklus nebo … použiješ “*” pro násobení. Že je to divný? Tak koukej

ruby-1.8.7-p174 > puts “ahoj kubo.” * 3
ahoj kubo.ahoj kubo.ahoj kubo.

Zkracování a vyzobávání

Občas je potřeba získat třeba první písmeno – nebo prvních několik znaků z celého řetězce. Opět tu máš na výběr, co použiješ. Buď metodu “slice”, nebo zápis s hranatými závorkami.

ruby-1.8.7-p174 > a[1..2]
=> “ub”
ruby-1.8.7-p174 > a.slice(1,2)
=> “ub”

Co když potřebuju poslední dvě písmena? Pak je tu opět několik možností

ruby-1.8.7-p174 > “Kuba”.reverse.slice(0,2).reverse
=> “ba”

nebo

ruby-1.8.7-p174 > “Kuba”[2,2]
=> “ba”

Určitě teď přemýšlíš, co bude lepší. Určitě ta první metoda – řetezec otočíme, vezmeme první dva znaky, a ty opět otočíme. A proč? Protože.. nevíš, jak ten řetězec je dlouhý, aby mohl říct, ře chceš od předposlední do poslední pozice. A zjišťovat délku, a pak upravovat.. Slice s reverse to udělá mnohem elegantněji.

Formátování

Občas každý potřebuje vypsat text, který je pěkne naformátovaný. Vetšinou se to používá při výpisech dat, aby byly sloupce pěkně zarovnané… Ruby sice umí printf, ale je tu elegantnější zápis

ruby-1.8.7-p174 > “%05d” % 19
=> “00019”

Teď jsme ruby řekli, aby vypsalo číslo “19”, zarovnané doprava na pět míst s tím, že prázdná místa budou plněna nulami. Zkus schválně formát “%5d”, zda poznáš změnu.

Jak to uděláme, chceme-li ale vypsat víc věcí? Co třeba řetězec a číslo?

ruby-1.8.7-p174 > “%s je %d let” % [“Kubovi”,11]
=> “Kubovi je 11 let”

Tady vidíš, že více prvků = pole.

Rozdělení do pole

Občas můžeš potřebovat rozdělit řetězec do pole – podle nějakého vzoru. Koukni na příklad:

ruby-1.8.7-p174 > a = “kubo tato mamo frantisku”
=> “kubo tato mamo frantisku”
ruby-1.8.7-p174 > a.split(” “).each do |jmeno|
ruby-1.8.7-p174 >     puts “Ahoj %s” % jmeno
ruby-1.8.7-p174 ?>  end
Ahoj kubo
Ahoj tato
Ahoj mamo
Ahoj frantisku

ruby-1.8.7-p174 > a.split(” “)
=> [“kubo”, “tato”, “mamo”, “frantisku”]

Tady jsme tedy rozdělili řetezec v proměnné “a” do pole. Jako vzor pro rozdělení jsme použili mezeru – ” “.

Je jasné, že jsme spolu nevyčerpali všechny možnosti, které objekt String nabízí. Z těch dalších možná budeš potřebovat downcase (převeď na malá písmena), upcase (převeď na velká písmena), capitalize (první písmeno velké) a třeba length (délka řetězce)

Nahoře máš odkaz na dokumentaci. Každý správný programátor ji pořád studuje, toho se neboj :-)

Leave a Reply

Your email address will not be published. Required fields are marked *

1 × 5 =