2

如何将字符串中的某些字母大写以使其仅大写指定的单词。

必须通过这些测试:“巴拉克奥巴马”==“巴拉克奥巴马”和“麦田里的守望者”==“麦田里的守望者”

到目前为止,我有一个将所有单词大写的方法:

#Capitalizes the first title of every word.
def capitalize(words)
     words.split(" ").map {|words| words.capitalize}.join(" ")
end

我可以采取哪些最有效的后续步骤来达成解决方案?谢谢!

4

2 回答 2

2

您可以创建一个您不想大写的单词列表并执行

excluded_words = %w(the and in) #etc

def capitalize_all(sentence, excluded_words)
  sentence.gsub(/\w+/) do |word|
    excluded_words.include?(word) ? word : word.capitalize
  end
end

顺便说一句,如果您使用的是 Rails 并且不需要排除特定的单词,您可以使用titleize.

"the catcher in the rye".titleize
#=> "The Catcher In The Rye"
于 2012-10-29T07:33:55.747 回答
0

这是另一个解决方案。它不是那么漂亮,但它处理的首字母缩略词是你想要保留所有的大写字母和缩略词,你不想像我以前使用的缩略词那样被弄乱。除此之外,它还确保您的第一个和最后一个单词大写。

class String
  def titlecase
    lowerCaseWords = ["a", "aboard", "about", "above", "across", "after", "against", "along", "amid", "among", "an", "and", "around", "as", "at", "before", "behind", "below", "beneath", "beside", "besides", "between", "beyond", "but", "by", "concerning", "considering", "d", "despite", "down", "during", "em", "except", "excepting", "excluding", "following", "for", "from", "in", "inside", "into", "it", "ll", "m", "minus", "near", "nor", "of", "off", "on", "onto", "opposite", "or", "outside", "over", "past", "per", "plus", "re", "regarding", "round", "s", "save", "since", "t", "than", "the", "through", "to", "toward", "towards", "under", "underneath", "unlike", "until", "up", "upon", "ve", "versus", "via", "with", "within", "without", "yet"]
    titleWords = self.gsub( /\w+/ )
    titleWords.each_with_index do | titleWord, i |
      if i != 0 && i != titleWords.count - 1 && lowerCaseWords.include?( titleWord.downcase )
        titleWord
      else
        titleWord[ 0 ].upcase + titleWord[ 1, titleWord.length - 1 ]
      end
    end
  end
end

以下是一些如何使用它的示例

puts 'barack obama'.titlecase # => Barack Obama
puts 'the catcher in the rye'.titlecase # => The Catcher in the Rye
puts 'NASA would like to send a person to mars'.titlecase # => NASA Would Like to Send a Person to Mars
puts 'Wayne Gretzky said, "You miss 100% of the shots you don\'t take"'.titlecase # => Wayne Gretzky Said, "You Miss 100% of the Shots You Don't Take"
于 2014-12-17T05:42:26.470 回答