Як і все в Ruby, String - це обʼєкт.
Рядки тексту (англ. string) складаються з довільної послідовності байтів (зазвичай символів), і їх ініціалізують та обробляють так само, як будь-який інший обʼєкт.
Насправді одна з найкорисніших речей у Ruby - це численні методи, які можна викликати в рядків тексту (та інших обʼєктів), щоб зекономити багато часу на написанні коду.
У цій вправі ми дослідимо та побавимося з деякими з цих допоміжних методів.
Хоча для створення рядка тексту можна використати String.new(...), набагато частіше використовують літерал.
Існує багато різних літералів, які можна використати, і вони поділяються на дві категорії: ті, що дозволяють інтерполяцію, і ті, що ні.
Найпоширеніші літерали - це одинарні та подвійні лапки ('...' і "...").
Одинарні лапки не дозволяють інтерполяцію, тоді як подвійні дозволяють.
Інтерполяція - це коли один рядок тексту вставляється в інший за допомогою синтаксису #{}.
# Use single quotes when not interpolated
location = 'World'
# And double quotes when interpolated
puts "Hello, #{location}!" #=> "Hello, World!"
Також можна використовувати інші літерали, наприклад %{... } для рядків з інтерполяцією та %q{...} для рядків без інтерполяції.
Вони стануть у пригоді, якщо рядок містить символи ' або ".
Примітка: немає жодного абсолютного правила, яке вимагає використовувати рядки без інтерполяції, якщо рядок не містить інтерполяції.
Корисно уявляти рядки тексту в Ruby так само, як ми уявляємо масиви.
Вони мають розмір, а їхні символи проіндексовані (перший індекс - 0):
my_string = "Some string"
my_string.size #=> 11
my_string[0] #=> 'S'
my_string[1] #=> 'o'
my_string[-1] #=> 'g'
# Find the first index of a character
my_string.index('m') #=> 2
Частини рядка тексту можна видобути за допомогою індексів або slice:
my_string = "Some string"
# Find three characters starting with the second character (index 1)
my_string[1, 3] #=> "ome"
my_string.slice(1, 3) #=> "ome"
Із семантичними значеннями рядків тексту теж можна працювати. Варто дослідити документацію Ruby, щоб дізнатися про всі методи, але ось кілька поширених прикладів:
"hello".capitalize #=> "Hello"
"HELLO".downcase #=> "hello"
"hello".center(9) #=> " hello "
" hello ".strip #=> "hello"
"hello world".split(" ") #=> ["hello", "world"]
Також можна використовувати такі методи, як gsub, щоб замінювати символи:
# Replace one character with another
"noob".gsub("o","0") #=> "n00b"
# (Advanced) Replace a regular expression
"Ruby really rocks".gsub(/[aieou]/,'') #=> "Rby rlly rcks"
У всіх наведених прикладах повертається новий String.
Однак багато методів мають відповідники, що закінчуються на ! і насправді змінюють сам рядок тексту.
# Use normal methods to return new strings
my_string = "hello"
my_string.capitalize #=> "Hello"
puts my_string #=> "hello"
# And bang-methods (...!) to modify the object
my_string = "hello"
my_string.capitalize! #=> "Hello"
puts my_string #=> "Hello"
У цій вправі ми працюватимемо з рядками журналу.
Кожен рядок журналу - це рядок тексту (англ. string) такого формату: "[<LEVEL>]: <MESSAGE>".
Існує три різні рівні журналу:
INFOWARNINGERRORНа нас чекають три завдання, і кожне з них отримує рядок журналу, з яким потрібно щось зробити. Існує безліч способів розвʼязати ці завдання. Виберімо улюблені методи з наведених вище прикладів і подивімося, що з цього вийде.
Реалізуйте метод LogLineParser#message, щоб він повертав повідомлення з рядка журналу:
LogLineParser.new('[ERROR]: Invalid operation').message
# => "Invalid operation"
Будь-які пробільні символи на початку й у кінці потрібно прибрати:
LogLineParser.new("[WARNING]: Disk almost full\r\n").message
# => "Disk almost full"
Реалізуйте метод LogLineParser#log_level, щоб він повертав рівень журналу з рядка журналу. Рівень потрібно повертати в нижньому регістрі:
LogLineParser.new('[ERROR]: Invalid operation').log_level
# => "error"
Реалізуйте метод LogLineParser#reformat, який переформатовує рядок журналу: спочатку йде повідомлення, а потім у дужках рівень журналу:
LogLineParser.new('[INFO]: Operation completed').reformat
# => "Operation completed (info)"
Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.