Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рядки.doc
Скачиваний:
0
Добавлен:
12.09.2019
Размер:
79.87 Кб
Скачать

Робота з рядками

В Ruby практично все, за рідкісним винятком, є об'єктом і рядки не виняток. Строковий об'єкт носить тип String, тобто є екземпляром класу String. Це означає, що рядок, як і будь-який інший об'єкт має власні методи. Щоб переконатися в тому, чи є щось об'єктом, досить спробувати викликати в цього “щось” метод #class. Метод #class не повертає повідомлення “Це - об'єкт”, він повертає клас (тип), якому належить об'єкт. Якщо щось не є об'єктом, то і не має методів взагалі.

"Abcdefg". Class # => String - переконуємося в тому, що рядок - об'єкт типу String

Рядки мають кілька методів дозволяють працювати з регістром символів:

#upcase - даний метод переводить всі символи рядка в верхній регістр (робить всі букви заголовними), приклад:

str = "abcdefg"

str.upcase # => "ABCDEFG"

str # => "abcdefg"

Зверніть увагу на те, що рядок не змінився, метод #upcase просто повернув новий рядок. Для того, щоб змінити сам рядок для якої був викликаний метод потрібно використовувати BANG-методи. BANG-методи, це такі методи, які змінюють сам об'єкт, для якого вони викликаються. В них немає нічого особливого, крім імені. Для BANG - методів бажано, але не обов'язково давати імена, який закінчуються на “!”. В нашому випадку це метод #upcase!:

str.upcase!

str # => "ABCDEFG"

#downcase - цей метод протилежний методи #upcase, він переводить символи рядка в нижній регістр, приклад:

str.downcase # => "abcdefg"

str # => "ABCDEFG"

str.downcase! # => "Abcdefg"

str # => "abcdefg"

#capitalize - даний метод використовується для того, щоб зробити першу букву рядка заголовної:

str.capitalize # => "Abcdefg"

str # => "abcdefg"

str.capitalize! # => "Abcdefg"

#swapcase - даний метод перетворює регістр символів у протилежний, тобто, великі літери на малі, а малі в заголовні, приклад:

rb = "RuBy"

rb.swapcase # => "rUbY"

rb # => "RuBy"

rb.swapcase! # => "rUbY"

Видалення пробілів

#lstrip і #rstrip - дані методи використовуються для видалення пробілів відповідно з лівого боку рядка і з правого боку рядка, приклад:

str = "abcdefg"

str.lstrip # => "abcdefg"

str.rstrip # => "abcdefg"

str.lstrip!. rstrip! # => "Abcdefg"

#strip - даний метод поєднує в собі обидва #lstrip і #rstrip:

str = "abcdefg"

str.strip # => "abcdefg"

str.strip! # => "Abcdefg"

#reverse - даний метод змінює порядок символів в рядку на зворотний, приклад:

str.reverse # => "gfedcba"

str.reverse! # => " Gfedcba"

str.reverse! # => " Abcdefg"

#size і #length - обидва ці методу виконують одне і те ж дію - вони повертають кількість символів в рядку:

"Abcdefg". Size # => 7

"Abc". Length # => 3

#delete - даний метод видаляє фрагмент рядка, приклад:

str # => "abcdefg"

str.delete ("abc") # => "defg"

str.delete! ("abc") # => "defg"

#scan - метод приймає як аргумент регулярне вираження і повертає масив підрядків (фрагментів рядка), які відповідає регулярному виразу. Регулярним виразами буде присвячена окрема глава, а поки приклад:

str # => "defg"

str.scan (/ d | e /) # => ["d", "e"]

str.scan (/ de /) # => ["de"]

str.scan (/ [^ d, f] /) # => ["e", "g"]

#chomp - даний метод видаляє закінчення рядка. Як приклад хочу привести маленький і дурний метод, який переводить множинну форму англійського слова в одиночну форму просто шляхом видалення закінчення:

"fishes". chomp ("es") # => "fish"

"fishes". chomp! ("Es") # => "fish"

def to_singular (word)

word [-2 .. -1] == "es"? word.chomp ("es"): word.chomp ("s")

end

str = "rabbits"

to_singular (str) # => "rabbit"

#index і #rindex - дані методи приймають як аргумент рядок або шаблон регулярного виразу і повертають відповідно індекс символу рядка з якого починається відповідно перше або останнє відповідність шаблону, приклади:

str = "mama mila ramu"

str.index ("m") # => 0

str.rindex ("m") # => 12

str.index (/ ma /) # => 0

str.rindex (/ ma /) # => 2

#insert - даний метод приймає в якості аргументів рядок і позицію вставки (індекс) для вставки цього рядка в рядок для якої він був викликаний, при цьому символи знаходяться в тому місці, куди проводиться запис не перезаписуються а зсуваються вперед, приклад:

str = "hell" # => "hell"

str.insert (str.size, "o") # => "hello"

Метод #insert виробляє зміни безпосередньо в самому рядку.

#chars і #each_char - є методами ітераторами, які проходять по кожному символу рядка, передають його в блок коду, який виконує над кожним символом певну дію, приклад:

"rubydev.ru". chars do | ch |

if i = = 0 or i% 2 = = 0

print ch.upcas

else

print ch

end

i + = 1

end

# => RuByDeV.Ru

#empty? - Даний метод повертає значення true якщо рядок порожня і false, якщо в рядку є хоча б один символ:

"". empty? # => true

"Hello". empty? # => false

#include? - Метод приймає фрагмент рядка і перевіряє рядок для якої був викликаний на те, чи існують в ній підрядка відповідні фрагменту, приклад:

"Hello". include? ("ll") # => true

"Hello". include? ("bye") # => false

#concat, += і << - всі три методи виконують одне і те ж дію - додають до існуючої рядку рядок, що була передана в якості аргументу, приклади:

str = "ruby"

str << "_start"

str # => "ruby_start"

str = "ruby"

str + = "_start "

str # => "ruby_start "

str = "ruby"

str.concat ("_start ")

str # => "ruby_start "