Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
name = "Боб"
age =28
str = sprintf("Привет, %s... Похоже, тебе %d лет.", name, age)
Спрашивается, зачем нужен этот метод, если можно просто интерполировать значения в строку с помощью конструкции
#{expr}
sprintf
str = sprintf("%-20s %3d", name, age)
В классе
String
%
str = "%-20s %3d" % [name, age] # To же, что и выше
Имеются также методы
ljust
rjust
center
str = "Моби Дик"
s1 = str.ljust(12) # "Моби Дик"
s2 = str.center(12) # " Моби Дик "
s3 = str.rjust(12) # " Моби Дик"
Можно задать и второй параметр, который интерпретируется как строка заполнения (при необходимости она будет урезана):
str = "Капитан Ахав"
s1 = str.ljust(20,"+") # "Капитан Ахав++++++++"
s2 = str.center(20,"-") # "----Капитан Ахав----"
s3 = str.rjust(20,"123") # "12312312Капитан Ахав"
2.10. Строки в качестве объектов ввода/вывода
Помимо методов
sprintf
scanf
StringIO
Из-за сходства с объектом
IO
2.11. Управление регистром
В классе
String
Метод
downcase
upcase
s1 = "Бостонское чаепитие"
s2 = s1.downcase # "бостонское чаепитие"
s3 = s2.upcase # "БОСТОНСКОЕ ЧАЕПИТИЕ"
Метод
capitalize
s4 = s1.capitalize # "Бостонское чаепитие"
s5 = s2.capitalize # "Бостонское чаепитие"
s6 = s3.capitalize # "Бостонское чаепитие"
Метод
swapcase
s7 = "ЭТО БЫВШИЙ попугай."
s8 = s7.swapcase # "это бывший ПОПУГАЙ."
Начиная с версии 1.8, в язык Ruby включен метод
casecmp
<=>
n1 = "abc".casecmp("xyz") # -1
n2 = "abc".casecmp("XYZ") # -1
n3 = "ABC".casecmp("xyz") # -1
n4 = "ABC".casecmp("abc") # 0
n5 = "xyz".casecmp("abc") # 1
У каждого из перечисленных методов имеется аналог, осуществляющий модификацию «на месте» (
upcase!
downcase!
capitalize!
swapcase!
He существует встроенных методов, позволяющих узнать регистр буквы, но это легко сделать с помощью регулярных выражений:
if string=~ /[a-z]/
puts "строка содержит символы в нижнем регистре"
end
if string =~ /[A-Z]/
puts "строка содержит символы в верхнем регистре"
end
if string =~ /[A-Z]/ and string =~ /а-z/
puts "строка содержит символы в разных регистрах"
end
if string[0..0] =~ /[A-Z]/
puts "строка начинается с прописной буквы"
end
Отметим, что все эти методы не учитывают местные особенности (locale).
2.12. Вычленение и замена подстрок
В Ruby к подстрокам можно обращаться разными способами. Обычно применяются квадратные скобки, как для массивов, но внутри скобок может находиться пара объектов класса
Fixnum
Если задана пара объектов класса
Fixnum
str = "Шалтай-Болтай"
sub1 = str[7,4] # "Болт"
sub2 = str[7,99] # "Болтай" (выход за границу строки допускается)
sub3 = str[10,-4] # nil (отрицательная длина)
Важно помнить, что это именно смещение и длина (число символов), а не начальное и конечное смещение.
Если индекс отрицателен, то отсчет ведется от конца строки. В этом случае индекс начинается с единицы, а не с нуля. Но при нахождении подстроки указанной длины все равно берутся символы правее, а не левее начального:
str1 = "Алиса"