b = s1.count('bdr') # 5

Строковый параметр ведет себя как простое регулярное выражение. Если он начинается с символа ^, то берется дополнение к списку:

c = s1.count('^а')    # 6

d = s1.count ('^bdr') # 6

Дефис обозначает диапазон символов:

e = s1.count('a-d')  # 9

f = s1.count('^a-d') # 2

2.29. Обращение строки

Для обращения строки служит метод reverse (или его вариант для обращения «на месте» reverse!):

s1 = 'Star Trek'

s2 = s1.reverse # 'kerT ratS'

si.reverse!     # si теперь равно 'kerT ratS'

Пусть требуется обратить порядок слов (а не символов). Тогда можно сначала воспользоваться методом String#split, который вернет массив слов. В классе Array тоже есть метод reverse, поэтому можно обратить массив, а затем с помощью метода join объединить слова в новую строку:

phrase = 'Now here's a sentence'

phrase.split(' ').reverse.join(' ')

# 'sentence a here's Now'

2.30. Удаление дубликатов

Цепочки повторяющихся символов можно сжать до одного методом squeeze:

s1 = 'bookkeeper'

s2 = s1.squeeze # 'bokeper'

s3 = 'Hello...'

s4 = s3.squeeze # 'Helo.'

Если указан параметр, то будут удаляться только дубликаты заданных в нем символов:

s5 = s3.squeeze('.') # 'Hello.'

Этот параметр подчиняется тем же правилам, что и параметр метода count (см. раздел 2.28), то есть допускаются дефис и символ ^. Имеется также метод squeeze! .

2.31. Удаление заданных символов

Метод delete удаляет из строки те символы, которые включены в список, переданный в качестве параметра:

s1 = 'To be, or not to be'

s2 = s1.delete('b')  # 'To e, or not to e'

s3 = 'Veni, vidi, vici!'

s4 = s3.delete(',!') # 'Veni vidi vici'

Этот параметр подчиняется тем же правилам, что и параметр метода count (см. раздел 2.28), то есть допускаются символы - (дефис) и ^ (каре). Имеется также метод delete!.

2.32. Печать специальных символов

Метод dump позволяет получить графическое представление символов, которые обычно не печатаются вовсе или вызывают побочные эффекты:

s1 = 'Внимание' << 7 << 7 << 7 # Добавлено три символа ASCII BEL.

puts s1.dump                   # Печатается: Внимание070707

s2 = 'abc def ghi '

puts s2.dump                   # Печатается: abc def ghi

s3 = 'Двойная кавычка: ''

puts s3.dump                   # Печатается: Двойная кавычка: '

При стандартном значении переменной $KCODE метод dump дает такой же эффект, как вызов метода inspect для строки. Переменная $KCODE рассматривается в главе 4.

2.33. Генерирование последовательности строк

Изредка бывает необходимо получить «следующую» строку. Так, следующей для строки 'aaa' будет строка 'aab' (затем 'aac', 'aad' и так далее). В Ruby для этой цели есть метод succ:

droid = 'R2D2'

improved = droid.succ # 'R2D3'

pill = 'Vitamin B'

pill2 = pill.succ     # 'Vitamin C'

He рекомендуется применять этот метод, если точно не известно, что начальное значение предсказуемо и разумно. Если начать с какой-нибудь экзотической строки, то рано или поздно вы получите странный результат.

Существует также метод upto, который в цикле вызывает succ, пока не будет достигнуто конечное значение:

'Files, A'.upto 'Files, X' do | letter |

 puts 'Opening: #{letter}'

end

# Выводится 24 строки.

Еще раз подчеркнем, что эта возможность используется редко, да и то на ваш страх и риск. Кстати, метода, возвращающего «предшествующую» строку, не существует.

2.34. Вычисление 32-разрядного CRC

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату