Arthalo
Arthalo

Reputation: 23

Ruby downcase method not working as expected

I am writing a small bit of code in Ruby that is supposed to redact a word that is specified by the user, regardless if the word that is being passed is all uppercase, lowercase or a combination of the two. The way that I tried to get around this was by just using the downcase! method on the strings being passed by the user. However, it would seem that it does not work correctly. For example, if the first string that is passed and stored in the variable "text" is in all uppercase and the second string that is passed and stored in the variable "redact" is all downcase, the program will fail to redact the word and will just print out everything in downcase.

Here is the code below:

puts "Enter what you want to search through"
text = gets.chomp.downcase!
puts "Enter word to be redacted"
redact = gets.chomp.downcase!

words = text.split(" ")

words.each do |word|
 if word == redact
     print "REDACTED "
 else
     print word + " "
 end
end

Upvotes: 2

Views: 840

Answers (2)

Kostas Rousis
Kostas Rousis

Reputation: 6088

The problem is that you use downcase! which will return nil if no change is made. The string itself is modified but the returned value is nil, which you save after in your text variable.

See the documentation about downcase and downcase! to understand the difference.

Upvotes: 6

Needham
Needham

Reputation: 467

puts "Enter what you want to search through"
text = gets.chomp.downcase
puts "Enter word to be redacted"
redact = gets.chomp.downcase

words = text.split(" ")

words.each do |word|
 if word == redact
     print "REDACTED "
 else
     print word + " "
 end
end

try it without the exclamation marks.

Upvotes: 2

Related Questions