我想修改红宝石字符串中第一个出现的字母。
例如:
> "abcabcabcabc".some_magic_method("a", "0", 3)
=> "0bc0bc0bcabc"
我很确定我错过了什么,但我找不到简单的方法!也许正在使用正则表达式?
答案 0 :(得分:8)
您可以使用基本的分组/连接方法:
"abcabcabcabc".split('a', 4).join('0')
请注意,拆分限制必须为:替换次数+ 1
答案 1 :(得分:2)
我的第一个想法是:
3.times.inject("abcabcabcabc") { |str, _| str.sub!('a','0') }
但我更喜欢Casimir的答案,特别是因为此解决方案仅为O(mn)
。
答案 2 :(得分:1)
这是另一种单程方法:
class String
def some_magic_method(c_before, c_after, ntimes)
gsub(/#{c_before}/) { ntimes -= 1; (ntimes>=0) ? c_after : c_before }
end
end
"abcabcabcabc".some_magic_method('a', '0', 3)
#=> "0bc0bc0bcabc"
"abcabcabcabc".some_magic_method('ab', 'xyz', 2)
#=> "xyzcxyzcabcabc"
答案 3 :(得分:0)
我做的很简单:
str = "abcabcabcabc"
3.times { str.sub!("a", "0") }
str # => "0bc0bc0bcabc"
如果你有方法:
class String
def some_magic_method(n, target, replacement)
n.times { self.sub!(target, replacement) }
self
end
end
str = "abcabcabcabc"
str.some_magic_method(3, 'a', '0') # => "0bc0bc0bcabc"