Книга: Программирование на языке Ruby

2.9. Форматирование строк

2.9. Форматирование строк

В Ruby, как и в языке С, для этой цели предназначен метод sprintf. Он принимает строку и список выражений, а возвращает строку. Набор спецификаторов в форматной строке мало чем отличается от принятого в функции sprintf (или printf) из библиотеки С.

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Капитан Ахав"

Оглавление книги

Оглавление статьи/книги

Генерация: 0.535. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз