2013-07-24 95 views
0

我又寫道一個簡單PROGRAMM與所述用戶輸入內的(())來替換文本: 如果我有例如本這樣的文字:紅寶石代碼替換串

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 

但不知何故,紅寶石不要驗證userinputs,相反,我得到:

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 
+0

你需要'eval()'那個字符串或者什麼 – 2013-07-24 10:30:34

+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 
+0

對不起,但(())更改之間的內容,所以我不能使用簡單userinput1,2,3 –

+0

我怎麼可以gsub例如[0..7]之間? –

+1

啊,它也是動態的嗎?沒問題。您必須通過字符串[掃描](http://ruby-doc.org/core-2.0/String.html#method-i-掃描)並查找佔位符。然後你問用戶的價值觀,並進行替代。 –