从array1读取array1

时间:2017-02-10 15:19:06

标签: arrays ruby variables

刚刚学习一些基本的Ruby概念作为初学者。不是真的在寻找代码,而是在下面的问题背后的一些基本原则(如果你需要,显然可以用代码表达自己:0)

在一个简单的编辑文本练习中,用户输入一些文本,然后输入要编辑的单词,我对此很好,并且可以使其工作方式多种多样。 然而...

为了处理用户可以为文本或编辑单词输入大写和/或小写字母的可能性,我需要再次创建变量.downcase!。但是,如果一旦程序运行,你想将这些单词恢复到原始状态呢?

我想也许你需要为原始文本创建一个数组,其中每个单词在数组中都有一个索引,用小写字母创建一个相应的数组,如果一个单词没有被编辑,那么你会比较索引从小写数组和从原始数组写入相应的索引...这听起来是正确的还是我在思考它,是否有更简单的方法?

感谢您的帮助

puts " What is your message"
text1 = gets.chomp
text2 = text1.downcase
puts "What is your secret word"
redact = gets.chomp.downcase!
words = text2.split (" ")
words.each do |x|
  if 
   x == redact
   print "REDACTED" + " "
 else
   print x + " "
   end
end

我已经添加了我的工作代码,你可以看到我已经将text2与text2分开了,因为它不是严格必要的,而是保持原始格式

1 个答案:

答案 0 :(得分:3)

你的解决方案听起来像它可以工作,作为一个初学者,编写一个完整的解决方案可能是有用的。但不要忘记,红宝石可以为你做很多有趣的事情。

假设我们将输入内容放入sentence,并且要编辑的字符串存储在redact中。

我们可以做一些简单的事情:

sentence.gsub(/#{redact}/i, "*" * redact.length)

gsub查找第一个参数的所有匹配项并将其替换为第二个参数,并返回一个新字符串。 首先注意我们使用编辑后的字符串作为第一个arg的regular expression,而i表示它应该匹配不区分大小写,如您所愿。 现在,第二个arg只是一串与编辑后的字符串等效长度的星号。

例如,如果我们有以下内容:

sentence = 'this is My Sentence'
redact = 'my'
puts sentence.gsub(/#{redact}/i, "*" * redact.length)

上述方法将打印this is ** Sentence

还有一点要注意:这个正则表达式将匹配所有出现的字符串。例如,如果redact = 'is',则生成的句子将为th** ** My Sentence。如果不是预期的用例,你可以重写正则表达式以避免这种情况。

相关问题