2013-01-10 23 views
2

我正在嘗試編寫一種將標題資本化的方法。它不應該利用每一個詞,而應該利用大詞。有時候,它必須利用每個詞彙。也許我需要爲這些小詞添加一個例外。它是Ruby教程的一部分,我不能使用Rails titleize方法。這是我到目前爲止。請讓我知道你是否可以幫忙。資本化標題

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

你正在做一個教程,不能使用'titleize',但是可以讓我們幫你嗎?做一個教程的想法是,你做的工作,並找出答案。 –

+1

您是否可以用一些您期望的輸入和輸出來詳細說明您的問題 – sameera207

+0

我知道我應該獨立完成它,但我的想法已經不多了。一個輸出的例子是「戰爭與和平」變成「戰爭與和平」或「酷博士的神祕冒險」成爲「酷博士的神祕冒險」。我正在構建一個if/else語句.include?方法來檢查字符串中的小單詞,但是我在語法上遇到了一些問題。任何建議? – PaperKraftMike

回答

4

大廈關閉約什 - 福格茨評論:

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恆定並將其移出的功能,因爲他們永遠不會改變。

+0

感謝您的幫助約翰尼克蛋糕我嘗試了你的建議,它適用於一些測試,如果我用.capitalize代替塊中的.titleize方法,它似乎仍然不會如何排除做得太過資本化的lowercase_words。任何更多的指針?還是我太遠了我的頭,這一個?在此先感謝。 – PaperKraftMike

+1

固定的。我已經測試好。首先,是的,我需要使用'資本'而不是'titleize'。第二,我的lower_case w列表ords必須用空格分隔(而不是逗號)。 – johnnycakes

+0

萬歲!有效!非常感謝。 – PaperKraftMike

1

這是一個非常複雜的問題,並且@johnnycakes答案是一個很好的開始,但是lowercase_words的列表並不詳盡。任何不超過4個字母的介詞不應該被大寫,例如over,into,as等等。此外,除第一個單詞之外,標題的最後一個單詞總是應該大寫。

維基百科有一個list of English prepositions。然而,由於有些詞既可以是介詞也可以是動詞,所以這會變得更加複雜,所以「我喜歡你」會大寫「like」,而「像Flynn一樣」不會。

The Rails titleize方法似乎將每個單詞都大寫,而titleize gem在遵循實際樣式指南方面做得稍微好一些,但仍未解決介詞問題。