2

タイトルを大文字にするメソッドを書こうとしています。すべての単語を大文字にするのではなく、必要に応じて大きな単語のみを大文字にする必要があります。場合によっては、すべての単語を大文字にする必要があります。ちょっとした言葉の例外を追加する必要があるかもしれません。これは Ruby チュートリアルの一部であり、Railstitleizeメソッドを使用できません。これが私がこれまでに持っているものです。お手伝いできることがあればお知らせください。

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

2 に答える 2

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を定数にして、変更されないため、関数の外に移動することをお勧めします。

于 2013-01-10T17:18:04.253 に答える
1

これは非常に複雑な問題であり、@johnnycakes の回答は素晴らしいスタートですが、lowercase_words のリストは完全ではありません。over、into、on、as など、4 文字以下の前置詞は大文字にしないでください。また、タイトルの最初の単語に加えて、最後の単語も常に大文字にする必要があります。

ウィキペディアに英語の前置詞のリストがあります。ただし、一部の単語は前置詞と動詞の両方になる可能性があるため、これはさらに複雑になります。したがって、「I Like You」は「like」を大文字にしますが、「In like Flynn」はそうしません。

Rails の titleize メソッドはすべての単語を大文字にしているように見えますが、titleize gemは実際のスタイル ガイドラインに従うという点でわずかに優れていますが、前置詞の問題にはまだ取り組んでいません。

于 2014-12-03T16:52:41.643 に答える