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