用ruby代码替换字符串

时间:2013-07-24 10:27:55

标签: ruby

我用一个简单的程序来替换(())中的文本和用户输入: 如果我有这样的文本:

i hab an terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3))

我首先尝试用}

替换((用#{和))
str1 = gets.chomp
str2 = str1.clone

a = 0

begin
s = str2.index('((', a)
str2[s..s+1] = '#{'
a = a + s + 1
end until str2.length < a

b = 0

begin
s = str2.index('))', b)
str2[s..s+1] = '}' 
b = b + s + 1
end until str2.length < b

userinput1 = gets.chomp
userinput2 = gets.chomp
userinput3 = gets.chomp

puts str2

但不知何故,ruby不会验证用户输入,而是我得到:

i hab an terrible #{userinput1} last #{userinput2} in a horrible #{userinput}

我认为问题在于我写的代码:

str2[s..s+1] = '#{' 

而不是

str2[s..s+1] = "#{"

因为所有剩下的代码都是一个对象,直到它被}关闭。那我该怎么办?我希望你理解我的问题?

str1 = gets.chomp

word = str1.scan(/\(\(\w+\)\)/)

word.each do |word|
str1.gsub(word, "what the fuck")
end

puts str1

1 个答案:

答案 0 :(得分:0)

很好的尝试。但是有一种更简单的方法。更简单:)基本上,你只需要收集用户输入。有替换字符串部分的方法。

userinput1 = gets.chomp
userinput2 = gets.chomp
userinput3 = gets.chomp

template = "i had a terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3)"

result = template.gsub('((userinput1))', userinput1).
                  gsub('((userinput2))', userinput2).
                  gsub('((userinput3))', userinput3)
              #    ^^ replacing happens here    
puts result