Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ruby - центрирование многострочной строки

Автор вопроса: CommunityОтветов: 1

В Ruby я хотел бы центрировать многострочную строку, чтобы она отображалась в середине экрана. Я просмотрел документацию Class:String Ruby, а также искал Google, но не смог найти решение.

Вот что я пробовал. Здесь я использую escape-символ \n для новой строки после каждой строки, поэтому мне не нужно вводить puts, а затем кавычки в каждой строке. Я также ввожу метод center класса String в конце строки, потому что я хотел бы, чтобы все строки были центрированы, без вызова метода после каждой строки.

def draw_string
  puts "******** \n
        ******** \n
        ******** \n
        ********".center(150)
end

Когда я вызываю draw_string, это то, что я хотел бы видеть

                                   ********
                                   ********
                                   ********
                                   ********

Это то, что я получаю

                                   ********
********
********
********

Пожалуйста, не спрашивайте меня, почему я хочу сосредоточить это, но дайте совет. Это очень высоко ценится

  • Вы ставите две \n между каждой строкой, не уверен, что это сделано намеренно. meagar 26.05.2014
  • Похоже, это была ошибка с моей стороны. Я отредактирую свой пост, чтобы в нем была только 1 новая строка. Я превзошел сам себя. 26.05.2014
  • Вам также нужно удалить лишние \n из самой строки. Это не обязательно, вы вставляете буквальный символ новой строки в дополнение к экранированному символу новой строки \n. Смотрите мой ответ; Я удалил лишние \n из строки. meagar 26.05.2014
  • Если у вас есть более одной строки для центрирования, вы можете написать метод со строкой в ​​качестве параметра; то есть def draw_string(str). Cary Swoveland 26.05.2014

rubystringcenteringnewlinequotes

Ответы

Ответ 1 · рейтинг 4 · meagar

Вам нужно центрировать каждую линию отдельно. Строковый класс Ruby не поддерживает центрирование многострочной строки.

Используйте простую комбинацию split/map/join:

def draw_string
  puts "********
        ********
        ********
        ********".lines.map { |line| line.strip.center(150) }.join("\n")
end

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы