- •Інтерполяція рядків
- •Конкантенація рядків
- •Робота з рядками
- •Видалення пробілів
- •Дано рядок. Необхідно знайти загальну кількість російських символів.
- •Дано рядок, який складається з символів латиниці. Необхідно перевірити впорядкування рядка по зростанню.
- •Дана рядок в якому слова записані через пробіл. Необхідно перемішати всі слова цього рядка у випадковому порядку.
Робота з рядками
В 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 "