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

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

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

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

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

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

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

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

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


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


Ответы (1)


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

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

def draw_string
  puts "********
        ********
        ********
        ********".lines.map { |line| line.strip.center(150) }.join("\n")
end
person meagar    schedule 26.05.2014
comment
Большое спасибо, это сработало. Ваш совет очень ценится. Еще раз спасибо - person ; 26.05.2014