Array.include? doesn’t seem to be telling me the truth.
Obviously this is ME getting it wrong, but could somebody explain what
is happening please.
- First I set up ab array of common words
def initialize
@common_words = ["&", “and”, “or”, “ltd”, “ltd.”, “limited”]
end
- Here I check to see if the variable words contains any uncommon
words, and return them in a new array
def remove_common_words words
ok_words = Array.new
words.each(" “) do
|word|
logger.debug “checking if word " + word + " is common”
if !@common_words.include?(word)
logger.debug word + " is not common”
ok_words << word
logger.debug "ok_words: ".concat ok_words.to_s
end
end
return ok_words
end
- And this is the simple test…
def test_remove_common_words
e = Entity.new
x = e.remove_common_words “limited Martin & Steve’s Company limited”
puts x
end
The output from the puts is: Uncommon words returned:limited Martin &
Steve’s Company
Hi,
See comment below
Martin Smith wrote:
Array.include? doesn’t seem to be telling me the truth.
Obviously this is ME getting it wrong, but could somebody explain what
is happening please.
- First I set up ab array of common words
def initialize
@common_words = ["&", “and”, “or”, “ltd”, “ltd.”, “limited”]
end
- Here I check to see if the variable words contains any uncommon
words, and return them in a new array
def remove_common_words words
ok_words = Array.new
words.each(" ") do
^
|-- this operation leaves a space at the end of each word.
|word|
logger.debug "checking if word " + word + " is common"
if !@common_words.include?(word)
^
|-- replace with '!@common_words.include?(word.strip)'
and it should work fine
logger.debug word + " is not common"
ok_words << word
logger.debug "ok_words: ".concat ok_words.to_s
end
end
return ok_words
end
- And this is the simple test…
def test_remove_common_words
e = Entity.new
x = e.remove_common_words “limited Martin & Steve’s Company limited”
puts x
end
The output from the puts is: Uncommon words returned:limited Martin &
Steve’s Company
good luck
Bill Stevens
Thanks William - that worked great.
Try this instead:
def remove_common_words(words)
words.split(" ") - @common_words
end
Forgot to say that the problem is that String#each doesn’t do what you
want.
irb> “foo bar”.each(" ") { |x| p x }
"foo "
“bar”
(Note the space in "foo ".)