Опубликован: 27.07.2006 | Доступ: свободный | Студентов: 3265 / 548 | Оценка: 4.28 / 4.13 | Длительность: 26:56:00
Специальности: Программист
Лекция 11:

Введение в ООП

< Лекция 10 || Лекция 11: 123456789
Строки

Другим столь же распространенным классом является класс String. К этому классу относятся произвольные строки символов, заключенные в апострофы или кавычки, например, 'hello', 'раз, два, три', "привет всем". Есть несколько альтернативных способов задания каждого из этих видов строк.

Для задания строки в апострофах можно использовать любой из способов представленных ниже.

puts 'hello'        # hello 
puts %q/hello/      # hello 
puts %q(hello)      # hello

Два подряд идущих символа \ внутри такой строки заменяются на один.

puts 'hell\\o'      #  hell\o  
puts %q(hell\\o)    #  hell\o

Для того чтобы внутрь строки, заключенной в апострофы, вставить апостроф, следует предварительно "экранировать" его символом \ (обратный слеш).

puts 'hell\'o'      # hell'o  
puts %q(hell\'o)    # hell\'o  
puts 'hel"l"o'      # hel"l"o

Для создания строки, заключенной в кавычки, следует либо просто заключить ее в кавычки, либо использовать конструкции %Q или %, после которых указывается строка, обрамленная с двух сторон одним и тем же символом, отличным от цифр и букв (можно использовать также пару любых скобок). Ниже перечислено несколько способов задания строки "hello".

"hello"  %Q/hello/ %Q{hello} %Q(hello) %Q!hello!
%<hello> %(hello)  %!hello!  %*hello*  %+hello+

puts "Say \"Hello\"" # Say "Hello"

Строка, заключенная в кавычки, позволяет интерпретировать последовательности символов, начинающиеся с символа \ такие, например, как \n (символ перехода на новую строку) и \t (табуляция). Другой особенностью строк, заключенных в кавычки, является возможность использования подстановки: если строка содержит некоторое выражение, ограниченное символами #{ и }, то оно заменяется на результат его вычисления. Добавьте в программу следующие строки и проанализируйте полученный вывод.

puts "a \t b"; puts 'a \t b'
puts "выражение 3*5+8 равно  #{3*5+8}"
puts 'выражение 3*5+8 равно  #{3*5+8}'
puts "работа с целыми числами: 5/8 = #{5/8}"
puts "перевод в класс Float: 5/8 = #{5/8.to_f}"

К строкам могут применяться методы to_i и to_f. При преобразовании к целому числу отбрасывается оставшаяся часть строки, как только встречается символ, отличный от цифры (исключение - знак плюс или минус в первой позиции строки). Аналогичные правила применяются и при преобразовании к дробному числу. Единственным отличием является то, что первая найденная точка рассматривается как разделитель между целой и дробной частями. Следующий фрагмент иллюстрирует сказанное:

puts "-12.34".to_i
puts "12.34".to_f
puts "+12:34".to_i
puts "12qq34".to_f

Для получения строки, содержащей символ с заданным ASCII кодом, используется метод chr, например,

puts 209.chr

Следует помнить, что этот метод может быть применен только к положительному целому числу, не превышающему 255.

Класс String предоставляет большое число методов для работы со строками, некоторые из которых представлены в следующей таблице.

Назначение и пример использования метода Результат
+ Сцепление строк "мол" + "око" "молоко"
* Повтор строки "ab" * 3 "ababab"
[ ] Возвращает ASCII-код символа, находящегося на указанной позиции строки (отсчет начинается с нуля)
"abcdef"[0]
"abcdef"[0].chr

97

"a"

[нач..кон] Возвращает подстроку, заключенную в указанном диапазоне (включая концы) "abcdef"[0..3] "abcd"
[нач, дл] Возвращает подстроку, начинающуюся с указанной позиции и имеющую заданную длину "abcdef"[0,3] "abc"
capitalize Заменяет первый символ строки (если он является буквой латинского алфавита) на заглавную "abc".capitalize "Abc"
chop Удаляет указанные символы из строки, может указываться диапазон изменения символов
"abcdef".delete('ea')
"abcdef".delete('a-c')
"bcdf" "def"
index Определяет номер позиции, с которой начинается указанная подстрока; можно указывать номер позиции, с которой начинается поиск
"abcdabcd".index("cd")
"abcdabcd".index("cd",3)

2

6

length size Определяют длину строки (в байтах)
"12345678".length
"12345678".size

8

8

ljust rjust center Дополняют строку пробелами до указанной ширины, выравнивая соответственно по левому краю, по правому краю или по центру
"123".ljust(8)
"123".rjust(8)
"123".center(8)
"123     "
"     123"
"  123   "
reverse Возвращает строку, содержащую символы в обратном порядке "1234567".reverse "7654321"
strip Удаляет пробелы в начале и конце строки " 123 ".strip "123"
squeeze Оставляет в группе повторяющихся символов только один; допускается задание списка символов, на которых распространяется данное действие
"22---23**".squeeze
"22---23**".squeeze('*-')
"2-23*" "22-23*"
tr Заменяет все найденные вхождения символов на заданные "22+33=55".tr('25','47') "44+33=77"

Отдельного упоминания заслуживает метод eval, позволяющий динамически выполнять другие методы. Этот метод анализирует переданную ему строку, рассматривая ее как часть программы, и выполняет ее. Обратите внимание, что при вызове этого метода используется не точечная, а функциональная форма записи:

puts eval("2**10")
puts eval('"мол".size * "око".size')   # 9
#!/usr/bin/env ruby

puts 'hello'        # hello 
puts %q/hello/      # hello 
puts %q(hello)      # hello 

puts 'hell\\o'      #  hell\o  
puts %q(hell\\o)    #  hell\o  

puts 'hell\'o'      # hell'o  
puts %q(hell\'o)    # hell\'o  
puts 'hel"l"o'      # hel"l"o 

puts "hello"
puts %Q/hello/
puts %Q!hello!
puts %Q{hello}
puts %Q(hello)
puts %Q!hello!
puts %<hello>
puts %!hello!
puts %*hello*
puts %+hello+
puts %(hello)

puts "Say \"Hello\""   #  Say "Hello"  
puts "Say 'Hello'"     #  Say 'Hello' 

puts "a \t b"
puts 'a \t b'
puts "выражение 3*5+8 равно  #{3*5+8}"
puts 'выражение 3*5+8 равно  #{3*5+8}'
puts "работа с целыми числами: 5/8 = #{5/8}"
puts "перевод в класс Float: 5/8 = #{5/8.to_f}"

puts "-12.34".to_i
puts "12.34".to_f
puts "+12:34".to_i
puts "12qq34".to_f

puts 209.chr

puts "123456789".reverse
puts "  123       "
puts "  123  ".strip 
puts "---22--23****".squeeze('*-')
puts "---22--23****".squeeze

puts "Дашка любит молоко, а Танька - квас".tr('ДТ','МД')
puts "22+33=55".tr('25','47')

puts "abcdef"[0].chr
puts "abcdef".chop
puts "abcdef".chop.chop
puts "abcdef".delete("ea")
puts "abcdef".delete('a-c')
puts "abcdefabcdef".length
puts "12345678".size

puts "ABCDEF".downcase
puts "abcdef".index("cd")
puts "abcdefabcdef".index("cd",3)

a="12345"
puts "12345"[3].chr
puts  "12345"[0..3]
puts  "12345"[0,3]

puts  "привет".capitalize # Не работает с русскими буквами!
puts "abcdabcd".index("cd",3)
puts "*"+"123".ljust(9)+*"
puts "*"+"123".center(9)+"*"
puts "*"+"123".rjust(9)+"*"

puts (eval "2**10")
puts (eval ""мол".size * "око".size') 

=begin
s="2*3+4"
puts s
puts "#{s}"
puts eval(s)
puts eval s

puts s.eval # Ошибка! Неправильный вызов метода

print "Введите команды:"
eval gets.chop!
=end
Пример 1.3.
< Лекция 10 || Лекция 11: 123456789
Светлана Овчаркина
Светлана Овчаркина
Елена Митющенко
Елена Митющенко
И какова взаимосвязь между информацией и данными?