我想创建一个'swearscan',可以扫描用户文本并将发誓的单词换成'censored'。我以为我编码得当,但显然不是因为我会告诉你发生了什么。有人请帮忙!
由于它的堆栈流我们将用其他东西代替发誓语言
puts "Input your sentence here: "
text = gets.downcase.strip
swear_words = {'cat' => 'censored', 'dog' => 'censored', 'cow' => 'censored'}
clean_text = swear_words.each do |word, clean|
text.gsub(word,clean)
end
puts clean_text
当我运行这个程序(带有实际的脏话)时,它返回的所有内容都是这样的哈希:catcensoreddogcensoredcowcensored。我的代码有什么问题,它返回哈希而不是clean_text,所有内容都被替换掉了?
答案 0 :(得分:1)
这对我有用:
puts "Input your sentence here: "
text = gets.downcase.strip
swear_words = {'cat' => 'censored', 'dog' => 'censored', 'cow' => 'censored'}
swear_words.each do |word, clean| # No need to copy here
text.gsub!(word,clean) # Changed from gsub
end
puts text # Changed from clean_text
答案 1 :(得分:0)
错误是gsub
不会更改原始字符串,但您希望它能够这样做。使用gsub!
将更改原始字符串。期望each
返回其中的内容也是错误的。只需在最后引用text
即可获取替换后的字符串。
顺便说一句,如果替换字符串都是相同的'censored'
,那么在那里使用哈希是没有意义的。你应该只有一个发誓单词的数组,并将替换字符串直接放在gsub!
方法中(或在其他地方将其定义为常量)。