Using a front page with Ruby 1.8.7

How can I make out some letters in a string to make it so that only the indicated words are capitalized.

These tests must pass: "Barack Obama" == "Barack Obama" & Amp; "sight in the rye" == "Catcher in the rye"

So far, I have a method that will use all the words:

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

What are the most effective next steps I could take to solve? Thanks!

+2
source share
2 answers

You can create a list of words that you do not want to use, and

 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 

By the way, if you used Rails and didn't need to exclude certain words, you could use titleize .

 "the catcher in the rye".titleize #=> "The Catcher In The Rye" 
+1
source

Here is another solution. It's not so pretty, but it's about abbreviations that you want to stay in caps and abbreviations that you don't want to be crippled like my previous use of the abbreviation. In addition to this, it ensures that your first and last word is capitalized.

 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 

Here are some examples of use

 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" 
0
source

All Articles