我無法找到解決此問題的解決方案,我做了一項研究以找到問題並修復它們,但無法想出任何答案。在Ruby中修改數組項目(如果它包含特定單詞)
我想要做的是將字符串轉換爲標題套用字符串。
例如: 「魔戒三部曲」>「的指環王」
(正如你所看到的,第一個單詞總是大寫,它不會,如果是無關緊要一篇文章,但如果字符串中有文章詞語,應該用小寫字母表示,如上例所示,並且大寫其他任何不是的單詞)。
這是規範(RSpec的)練習,我試圖解決的:
describe "Title" do
describe "fix" do
it "capitalizes the first letter of each word" do
expect(Title.new("the great gatsby").fix).to eq("The Great Gatsby")
end
it "works for words with mixed cases" do
expect(Title.new("liTTle reD Riding hOOD").fix).to eq("Little Red Riding Hood")
end
it "downcases articles" do
expect(Title.new("The lord of the rings").fix).to eq("The Lord of the Rings")
expect(Title.new("The sword And The stone").fix).to eq("The Sword and the Stone")
expect(Title.new("the portrait of a lady").fix).to eq("The Portrait of a Lady")
end
it "works for strings with all uppercase characters" do
expect(Title.new("THE SWORD AND THE STONE").fix).to eq("The Sword and the Stone")
end
end
end
這是我的嘗試,我到目前爲止有:
class Title
def initialize(string)
@string = string
end
def fix
@string.split.each_with_index do |element, index|
if index == 0
p element.capitalize!
elsif index == 1
if element.include?('Is') || element.include?('is')
p element.downcase!
end
end
end
end
end
a = Title.new("this Is The End").fix
p a
輸出:
「This」
「是」
=> [ 「這」, 「是」, 「該」, 「結束」]
我試圖這樣做:
- 創建一個名爲Title的類並用一個字符串初始化它。
- 創建一個名爲修復方法,到目前爲止,只爲指數檢查0 的
@string.split
與方法.each_with_index
(循環 通過),並打印element.capitalize!
(注意是「砰」,即 應該修改原始字符串,你可以看到它的輸出上面 ) - 我的代碼確實是檢查索引1(第二個字)和 調用
.include?('is')
,看看第二個字的文章, 如果是(與if語句)element.downcase!
被調用, 如果不是,我可以創建更多的索引檢查(但我意識到 這裏有些字符串可能由3個字組成,其他字符由5個, 其他由10等等組成,所以我的代碼效率不高, 這是我無法解決的問題。
也許創建一個文章詞彙列表並檢查.include?方法,如果有一些單詞的名單? (我試過這個,但.include?方法只接受一個不是數組變量的字符串,我嘗試了join(' ')
方法,但沒有運氣)。
非常感謝! 真的是!
你可以通過使用'case'語句或'Set'來匹配你想要的小寫字母來清理它。 – tadman 2015-01-20 23:09:38
我運行了你的代碼,它返回了'[「This」,「is」,「The」,「End」]',這與你發佈的內容不符。 – 2015-01-20 23:14:46
謝謝@Jordan它現在是最新的。 – bntzio 2015-01-20 23:16:51