Блог

Ruby: Знакомство со строками

Мое знакомство с Ruby. Возможно кому-то пригодится, когда будет начинать его учить. Краткая информация о строках.

Строки
Создание строки
title = String.new
title = String.new(‘Nothing’)
title = String(‘Nothing’)Проверить строку, не пустая ли она:
title.empty?

Узнать длину строки:
title.length
title.size

В ruby можно использовать двойны (“) и одинарные (‘) кавычки. Разница меду двойными и одинарными кавычками состои в том, что двойные кавычки интерпретируют символы escape – последовательности, а одинарные кавычки сохраняют их.
print “This\nis\ntest\n”
print ‘This\nis\ntest\n’

Конкатенация строк
можно дополнить существующую строку, применяя различные способы конкатенации.
n = “You know” ” ” “You right”
n = “You know” +” “+ “You right”
n = “You know ” << “You right”
“You know “.concat “You right”
f = “You know ”
s = “You right”
f.concat(s)

Можно сделать строку неизменной, метод freeze.
n = “You know You right”
n.freeze

n.concat(“!”) # TypeError
Проверить объект, возможно ли его изменять
n.frozen?

Доступ к строкам
new_str = “You know You right”

Если ввести к методу [] строку в качестве параметра, то он вернет эту строку, если найдет:
new_str[‘You’]  #=> ‘You’
new_str[‘cool’] #=> nil

Если указать в качестве индекса, метод вернет десятинчный код символа, на который указывает индекс.
new_str[7] #=> ‘119’
Если добавите метод chr то получите символ
new_str[7].chr #=> ‘w’

Можно задать диапазон (смещение и длину), чтобы сообщить методу [] позуцию, с которой вы хотите выбрать.
new_str[3..8]  #=> ‘ know ‘

Можно преобразовать результат с заглавной буквой:
new_str[4..8].capitalize  #=> ‘Know ‘

Диапазон символ, две точки (..) означают, что надо включить последний символ, три точки (…) означают, что последнее значение нужно исключить
n[0..4].capitalize  => “You k”
n[0…4].capitalize => “You “

Можно также воспользоваться регулярным выражением
n[/\w+ right$/] => “You right”

Найти индекс на положение соответсвующей подстроки.
n.index(‘k’) => 4

Забавное сравнение строк
Метод <=>, его называют spaceship operator (оператор “космический челнок”). Он сравнивает значение кодов символов строки и -1 – меньше, 0 – равны или 1 – больше, в зависимости от результата сравнения, которое производится с учетом регистра клавиатуры.
“a” <=> “a”     => 0
“a” <=> 97.chr  => 0
“a” <=> “b”    => -1
“a” <=> “`”    => 1
“a” <=> “A”    => 1
“a”.casecmp “A”    => 0

Размножить строку
‘You right ‘ * 3         => ‘You right You right’
‘You know,’ * 2 + ‘You right’     => ‘You know,You know,You right’

Вставить строку в строку
Метод insert позволяет вставить одну строку по указаному индексу в другую
“You You right”.insert 4, “know ”

Замена строк
n[‘You’] = ‘YOU’
puts n        => “YOU know You right”

Замена по индексу
n[4] = ‘K’
puts n        => “YOU Know You right”

Замена со смещением
n[4..8] = ‘KNOW? ‘

Замена по регулярному выражениею
n[/KNOW/] = ‘change’

Метод delete
С помощью delete или delete! можно удалить символы из строки:
“That`s call folks!”.delete “c”    #=> ‘That`s all folks’
можно отвергнуть весь параметр или его часть с помощью знака вставка (^), который применяется аналогичным образом
“That`s call folks!”.delete “abcdfigholk”, ‘^ha’ #=> ‘That`s a s!’

Заменяем подстроку
метод gsub – замещает подстроку
“That`s alll folks”.gsub ‘lll’, ‘ll’
метод replace – замещает строку оптом. Не просто подстроку, а всю целиком.
“That`s alll folks”.replace ‘Change all’ => “Change all”

Перевернуть строку
Реверсирование символов
‘abcdf’.reverse => “fdcba”

От строки к масиву
Метод split без труда преобразует строку в массив.
‘0 1 2 3 4 5 6 7 8 9’.split    #=> [“0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”]
Указать собственный разделитель
‘0123456789?10’.split ‘?’    #=> [“0123456789”, “10”]
Преобразовать по регулярному выражению
“0123456789?10”.split /\?/     #=> [“0123456789”, “10”]

Изменить регистр
нижний регистр
“YOU KNOW YOU RIGHT”.downcase
верхний регистр
“you know you right”.upcase
поменять местами верхний в нижний, а нижний в верхний
“you know you right”.swapcase

Преобраховать строки
“200”.class     => String
“200”.to_f     => 200.0
“200”.to_f.class => Float
аналогично и для int => to_i
Преобразовать строку в символ, можно применять метод to_sym или intern

Регульрные выражения
Регулярные выражение – это специальная последовательность символов, которая помогает установить соответвие, найти другие строки или наборы строк при помощи специализированого синтаксиса, хранящегося в шаблоне.
‘This is test for test’.grep(/(test)/) => [“This is test for test”]

Так же есть ещё метод =~ и оператор !~.
=~ обнаруживает совпадение, то возвращает смещение.
“color” =~ /colou?r/
!~ возращает true, если он не нашел совпадение в строке false в противном случаи
“color” !~ /colou?r/

Cсылка:
http://ruby-doc.org/
http://www.ruby-lang.org/en/documentation/quickstart/
http://tryruby.org/levels/2/challenges/2
http://www.tutorialspoint.com/ruby/ruby_loops.htm

Книга:
Майкл Фитцджеральд – Изучаем Ruby: 2008