2011-11-01 3 views

cevap

86

Kullanım #sub:

a.sub('bar', "BAR") 
+3

: hatta normal ifadeleri kullanabilirsiniz

str = "Hello World" str['Hello'] = 'Goodbye' # the result is 'Goodbye World' 

teşekkür! tüm oluşumları yerine gsub() kullanıyordum. – Sayuj

11

String#sub Yossi zaten dediğim gibi sen ne ihtiyaç vardır. Daha hızlı beri Ama, bunun yerine bir RegExp kullanmak:

a = 'foobarfoobarhmm' 
output = a.sub(/foo/, 'BAR') 
+0

Sadece bir kıyaslama yaptım ve regex, alt için parametre olarak bir dize kullanarak% 50 daha uzun sürüyor. –

+0

Kontrol ettim ve Regexp sürümü daha hızlı. MRI 1.9.2, 1.9.3, 2.0.0 ve hatta JRuby kullandım, hepsi Regexp versiyonunda daha hızlı. Karşılaştırma kodu: https://gist.github.com/tbuehlmann/5574713 Karşılaştırma ölçütünüzü belirtmek ister misiniz? – tbuehlmann

+0

Hmmmm. İddialarım için özür dilemeliyim, benim referansımda bir hata yaptım. Regex aslında daha hızlıdır. –

5

ilk geçtiği yerine, sadece bunu:

str = "I have 20 dollars" 
str[/\d+/] = 500.to_s 
# will give 'I have 500 dollars' 
+0

'500.to_s' bazen“ 500 ”' yazılır. :-) –

+1

Bunu kasıtlı olarak yazdım. Açık bir dize atamanız gerektiğini belirtmek için. Çünkü dönüşüm burada otomatik değil. Bunu yerine str [/ \ d + /] = 500' yaparsanız, bir hata alırsınız 'TypeError: Fixnum'un String'e dolaylı bir dönüşümü yoktur. –

İlgili konular