Как мне правильно использовать ljust и rjust в Ruby?

#ruby #string

#ruby #строка

Вопрос:

У меня есть некоторый код:

 line_width = 26

ch3 = "Chapter 3: Letters page 13"
puts(ch3.ljust(line_width/2)   ch3.rjust(line_width/2))

#=> Chapter 3: Letters page 13Chapter 3: Letters page 13
  

Я бы хотел, чтобы выходные данные были разделены посередине следующим образом:

 Half-Text__________________________________________________Half-Text
  

Как мне это сделать?

Комментарии:

1. Вам действительно нужна строка, в которой вы показываете единицу между двумя строками «Half-Text», или это для представления пробелов? Что вы подразумеваете под «половинным текстом»? Почему бы не заменить «Half-Text» на то, что вы действительно хотите там для своего примера. Я предполагаю, что длина строки, начинающейся line_width и заканчивающейся "Chapter 3: Letters" , "page 13" равна длине строки со строкой или пробелами между ними. Если это так, то между двумя концами есть только один пробел (или строка длиной один). Если бы это была страница "101" , между ними не было бы пробела.

Ответ №1:

Сначала вам нужно разделить текст на две части.

 line_width = 26

ch3 = "Chapter 3: Letters page 13"

ch3 = ch3.split(/s(?=page)/) #=> ["Chapter 3: Letters", "page 13"]

puts(ch3[0].ljust(line_width / 2)   ch3[1].rjust(line_width / 2))
  

Это выводит

 Chapter 3: Letters      page 13
  

Комментарии:

1. Ах, спасибо. Я просто читал свой учебник, и в нем никогда не упоминалось использование split. Очень странно. Рад, что не только я был тупым человеком.

2. "Chapter 3: Letters".size #=> 18 и line_width/2 #=> 13 , so puts(ch3[0].ljust(line_width / 2) пытается заполнить строку длиной 18 в 13 пробелы. В результате это .ljust(line_width / 2) игнорируется. (Например, "abcdef".ljust(1) #=> "abcdef" ). Однако, поскольку "page 13".size #=> 7 , ch3[1] слева будут добавляться 13-7 #=> 6 пробелы. В результате ваша фактическая длина строки равна 18 6 7 #=> 31 пробелам, а не 26 пробелам.

Ответ №2:

Если я правильно понимаю вопрос, я бы не использовал здесь ljust и rjust .

 line_width = 40
ch3 = "Chapter 3: Letters page 13"

left, right = ch3.split(/s(?=pages d )/)
  #=> ["Chapter 3: Letters", "page 13"] 
puts left   ' '*(line_width-left.size-right.size)   right
  

С принтами

 Chapter 3: Letters               page 13
  

Обратите внимание, что ' '*(line_width-left.size-right.size) создается строка, состоящая из

 line_with-left.size-right.size
  #=> 40 - 18 - 7 => 15
  

пробелы.