2011-07-16 25 views
2

文字列内の指定された部分文字列のインスタンスを探し、ランダムに置き換えます。 私は、部分文字列の各インスタンスに対して.eachメソッドを使用し、その結果に応じてrandを使用してコードブロックを置換するかどうかを考えていました。 しかし、私はこの状況で.eachメソッドを実装する方法についてちょっと固執しています。誰も助けることができますか? 例えば文字列内の部分文字列のランダムインスタンスを置換する(ruby)

答えて

4

あなたはString#gsubのブロックバリアントを使用することができます。

s = 'foo bar foo bar foo bar foo bar' 
# and you want to change random instances of "foo" with "baz": 
s.gsub(/foo/){|m| rand(2) == 0 ? 'baz' : m} 
#=> "baz bar foo bar baz bar foo bar" 
+1

私はgsubで反復できるのか分かりませんでした。クール! – fl00r

0
# this is original string 
mystring = "some long string" 
# this is given substring 
substring = "some substring" 
# this is raplace string (should be blank) 
replace = "some substring replace" 
# this is a loop 
mystring.split(substring).inject{|new, chunk| new += (rand(2) == 0 ? substring : replace) + chunk } 

(Iは、Ruby 1.9を使用しています):

mystring = "hello hello my dear friends! hello and goodbye after hello!" 
substring = "hello" 
replace = "pinky" 
mystring.split(substring).inject{|new, chunk| new += (rand(2) == 0 ? substring : replace) + chunk } 
#=> "hello pinky my dear friends! pinky and goodbye after hello!" 
+0

私は本当にやっているのか理解いけません。注射は何をするのですか?コードブロックに渡すパラメータは何ですか? –

+0

私は自分の答えを編集しました – fl00r

関連する問題