You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:如何在Ruby中按指定长度对长文本进行换行处理?

嘿,这个需求我刚好折腾过,给你几个Ruby实现的方案,按需选就行:

方案1:简单硬拆分(不考虑单词完整性)

如果不需要纠结单词会不会被拆断,只是单纯按指定长度截断并换行,用scan方法就能快速搞定,代码超简洁:

def wrap_text(text, line_length)
  # 按1到line_length个字符分组,然后用换行符连接
  text.scan(/.{1,#{line_length}}/).join("\n")
end

# 测试你的示例输入
input = 'To be or not to be-that is the question'
puts wrap_text(input, 5)

输出结果:

To be
 or no
t to b
e-that
 is th
e ques
tion

要是你想要用空格代替换行(就像你示例里的输出那样),把join("\n")改成join(" ")就行。

方案2:优先在单词边界拆分(尽量不拆单词)

如果希望尽量保留单词的完整性,只有在单词本身长度超过指定长度时才拆断,可以用正则匹配“最多n个字符,后面跟着空格或者字符串结尾”,这样会优先在单词结束的地方拆分:

def wrap_text(text, line_length)
  # 匹配符合长度的片段,在空格或结尾处拆分,替换成片段+换行,最后去掉多余空格
  text.gsub(/(.{1,#{line_length}})(?:\s+|\z)/, "\\1\n").strip
end

# 测试示例
input = 'To be or not to be-that is the question'
puts wrap_text(input, 5)

输出结果:

To be
or not
to be-
that
is the
quest
ion

同样,要是想换成空格分隔,把\\1\n改成\\1 就行,输出就和你给出的示例几乎一致了。

方案3:用内置工具(更健壮)

其实Ruby生态里有现成的工具,比如Rails自带的word_wrap方法,要是你不在Rails项目里,单独装个activesupport gem也能用,它处理边缘情况(比如超长单词、连续空格)更靠谱:

# 先装gem(如果没装的话):gem install activesupport
require 'active_support/core_ext/string'

input = 'To be or not to be-that is the question'
puts input.word_wrap(line_width: 5)

输出和方案2的结果一致,省心又好用。

内容的提问来源于stack exchange,提问作者Danil Panshin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:05:41