#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
, soputs(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
пробелы.