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

Ruby开发titleize方法时如何处理标题中虚词的大写规则

英文标题格式化(Titleize)虚词规则实现

你当前的代码仅能实现首单词强制大写,其余单词直接保留输入状态,无法满足英文标题的常规大小写排版规则。你提出的单独维护需要保持小写的虚词列表,是这类场景下最易维护、逻辑最清晰的实现思路,完全可行。

核心实现逻辑

不需要手动写循环做数组的元素比对,Ruby原生提供了include?方法可以直接判断单词是否存在于虚词列表中,配合位置判断即可完成规则校验,核心判断规则分为三类:

  • 固定强制规则:无论单词本身是不是虚词,标题的第一个、最后一个单词,必须首字母大写
  • 中间位置虚词规则:如果属于the、and、but、of、over这类虚词,保持全小写
  • 中间位置实词规则:不属于虚词列表的中间单词,首字母正常大写

完整可运行代码

def titleize(title)
  # 可按需调整的小写虚词列表,覆盖常见英文标题排版的虚词范围
  small_words = %w[the and but or for nor on at to from by of in over under]

  # 先把输入统一转小写再拆分,避免大小写差异导致的匹配失效
  words = title.downcase.split
  result = []

  words.each_with_index do |word, idx|
    # 首词、尾词强制大写
    if idx == 0 || idx == words.length - 1
      result << word.capitalize
    # 中间词如果在虚词列表中,保持小写
    elsif small_words.include?(word)
      result << word
    # 其余中间实词正常大写
    else
      result << word.capitalize
    end
  end

  result.join(' ')
end

# 效果验证
puts titleize("david copperfield") 
# 输出: David Copperfield
puts titleize("the bridge over the river kwai")
# 输出: The Bridge over the River Kwai

实现优化说明

  • 替换原代码中手动维护自增下标的while循环为each_with_index,省去冗余的i变量自增逻辑,代码可读性更强
  • 增加输入预处理环节:先将所有输入文本统一转小写再做拆分匹配,避免用户输入全大写格式的虚词(比如"THE")时,出现列表匹配失效的问题
  • 独立维护虚词列表,后续如果需要适配不同的英文标题排版规范(比如部分出版规范要求4个字母以上的虚词需要大写),仅需调整列表内的元素即可,不需要改动核心判断逻辑

内容的提问来源于stack exchange,提问作者Ruby Newb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 09:24:04