Ruby getting the longest word of a sentence

The shortest way is to use Enumerable's max_by:

def longest(string)
  string.split(" ").max_by(&:length)
end

Using regexp will allow you to take into consideration punctuation marks.

s = "lorem ipsum, loremmm ipsummm? loremm ipsumm...."

first longest word:

s.split(/[^\w]+/).max_by(&:length)
# => "loremmm"
# or using scan
s.scan(/\b\w+\b/).max_by(&:length)
# => "loremmm"

Also you may be interested in getting all longest words:

s.scan(/\b\w+\b/).group_by(&:length).sort.last.last
# => ["loremmm", "ipsummm"] 

It depends on how you want to split the string. If you are happy with using a single space, than this works:

def longest(source)
  arr = source.split(" ")
  arr.sort! { |a, b| b.length <=> a.length }
  arr[0]
end

Otherwise, use a regular expression to catch whitespace and puntuaction.

Tags:

Ruby