资本化头衔

时间:2013-01-10 05:23:37

标签: ruby

我正在尝试编写一种可以将游戏资本化的方法。它应该不是每个词都可以大写,但如果你愿意的话,应该只用大词。有时候,它必须把每个词都用掉。也许我需要为这些小词添加一个例外。它是Ruby教程的一部分,我不能使用Rails titleize方法。这是我到目前为止所拥有的。如果你能提供帮助,请告诉我。

def titleize(name)
  name.split(" ").each {|word| word.capitalize!}.join (" ")
end

2 个答案:

答案 0 :(得分:4)

建立Josh Voigts评论:

def titleize(name)
  lowercase_words = %w{a an the and but or for nor of}
  name.split.each_with_index.map{|x, index| lowercase_words.include?(x) && index > 0 ? x : x.capitalize }.join(" ")
end

您可能希望将lowercase_words设为常量并将其移出函数,因为它们不会发生变化。

答案 1 :(得分:1)

这是一个非常复杂的问题,@ johnnycakes的答案是一个很好的开始,但是lowercase_words的列表并不详尽。任何4个或更少字母的介词不应大写,例如over,into,on,as等。此外,除第一个单词外,标题的最后一个单词应始终大写。

维基百科有一个list of English prepositions。然而,由于某些词既可以是介词也可以是动词,因此更加复杂,所以"我喜欢你"将资本化"喜欢"而#34;像Flynn"不会。

Rails标题化方法似乎可以将每个单词大写,而titleize gem可以更好地遵循实际的样式指南,但仍然没有解决介词问题。