刚刚学习一些基本的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分开了,因为它不是严格必要的,而是保持原始格式
答案 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
。如果不是预期的用例,你可以重写正则表达式以避免这种情况。