如何扫描某些单词的文本/字符串,并用所需的单词格式化它们

时间:2014-06-04 03:18:55

标签: ruby

我想创建一个'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,所有内容都被替换掉了?

2 个答案:

答案 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!方法中(或在其他地方将其定义为常量)。