Ruby如何实现基于最长文本宽度的居中内容边框?
嘿,我来帮你搞定这个Ruby边框功能!看起来你已经有思路了,只是输出没达到预期,咱们一步步来实现你想要的效果:
实现思路
核心就是以最长单词的长度为基准,让所有文本居中,再加上边框,具体分这几步:
- 先找到输入文本里最长单词的长度,这是我们的基准宽度
- 生成顶部和底部的边框线,用
+开头结尾,中间用-填充到基准宽度 - 把每个单词在基准宽度内居中,左右加上
|作为侧边边框 - 依次打印边框、所有居中后的文本行、底部边框
完整代码示例
def add_border(texts) # 先过滤空内容,避免出现基准宽度为0的情况 valid_texts = texts.reject(&:empty?) return puts "没有有效文本哦~" if valid_texts.empty? # 获取最长文本的长度作为基准宽度 max_width = valid_texts.max_by(&:length).length # 生成顶部/底部边框 border_line = "+" + "-" * max_width + "+" # 打印边框和内容 puts border_line valid_texts.each do |text| puts "|#{text.center(max_width)}|" end puts border_line end # 测试一下! add_border(["Hello", "Ruby", "Programming"])
代码解释
valid_texts = texts.reject(&:empty?):先过滤掉空字符串,防止后续计算出错max_width = valid_texts.max_by(&:length).length:用max_by快速找到最长的文本,再取它的长度作为基准text.center(max_width):Ruby自带的字符串方法,能把文本在指定长度的区域内自动居中,不足的部分用空格填充- 边框线的长度和每行内容的长度保持一致,这样打印出来的边框就完全对齐啦
测试输出
运行上面的测试代码,你会得到这样的结果:
+-----------+ | Hello | | Ruby | |Programming| +-----------+
如果你的输入是一个长字符串(比如"Hello Ruby Programming"),只需要先分割成单词数组再传入:
input_str = "Hello Ruby Programming" add_border(input_str.split)
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

