On Jan 24, 2008 10:59 AM, jonsteenbergen / gmail.com <jonsteenbergen / gmail.com> wrote: > Sorry if this post is a duplicate, I'm having problems with my posts > posting. > > Hello, > I've searched through the Ruby documentation to try and figure this > out - no luck at all, also searched google to see if anyone had > written about this. Any help or direction on where to find the answer > would be much appreciated! > > This is in a rails project, but I think the answer lies in Ruby's > string methods. > I've got an object that has a list of materials attached to it, so in > my model I grab all the materials and convert them into a string - > like this: > > self.materials.collect{ |x| x.material.strip.humanize.split.map{ |w| > w.capitalize}.join(' ')}.join(', ') > > So I break apart each material by word, capitalize it, put that > material string back together and then join all the materials by > commas. > > This works great, except that some of the materials are books with the > titles surrounded by quotes - > Book "the Snowy Day," By Ezra Jack Keats > > So my code above works, except for the first letter after the initial > " > Is there a method to deal with this, so that it correctly capitalizes > the first letter after the " if there is a quote? I've tried a lot of > different things, but nothing is giving me the results I need. > > Anyone have any ideas? > Thanks! > Try changing split to split(/\b/), then change join(' ') to just join: irb(main):001:0> material = 'Book "the Snowy Day," By Ezra Jack Keats' => "Book \"the Snowy Day,\" By Ezra Jack Keats" irb(main):002:0> material.strip.split.map{ |w| w.capitalize }.join(' ') => "Book \"the Snowy Day,\" By Ezra Jack Keats" irb(main):003:0> material.strip.split(/\b/).map{ |w| w.capitalize }.join => "Book \"The Snowy Day,\" By Ezra Jack Keats" The split on /\b/ splits on word boundaries, preserving all the spaces and punctuation between. That's why the join no longer needs spaces: irb(main):004:0> material.strip.split(/\b/) => ["Book", " \"", "the", " ", "Snowy", " ", "Day", ",\" ", "By", " ", "Ezra", " ", "Jack", " ", "Keats"] -A