我正在尝试编写一种可以将游戏资本化的方法。它应该不是每个词都可以大写,但如果你愿意的话,应该只用大词。有时候,它必须把每个词都用掉。也许我需要为这些小词添加一个例外。它是Ruby教程的一部分,我不能使用Rails titleize
方法。这是我到目前为止所拥有的。如果你能提供帮助,请告诉我。
def titleize(name)
name.split(" ").each {|word| word.capitalize!}.join (" ")
end
答案 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可以更好地遵循实际的样式指南,但仍然没有解决介词问题。