我有一个字符串,例如
string = 'foo-bar'
我想要一个 new 字符串,该字符串不包含 index 3
中的字符(示例字符串中的-
),所以结果将是"foobar"
。不能更改前一个字符串。
这是我到目前为止所做的:
new_string = string.dup
new_string.slice!(3)
new_string
#=> "foobar"
string
#=> "foo-bar"
或作为“一线”:
new_string = string.dup.tap { |s| s.slice!(3) }
#=> "foobar"
但是,dup
和tap
看起来非常麻烦。有更简洁的方法吗?
答案 0 :(得分:2)
我不知道这种方法。您可以使用slice
自己编写。
at = 3
string = "abc-def"
def delete_at(string, at)
string.slice(0, at) + string.slice(at + 1, string.length)
end
x = delete_at(string, at) #> "abcdef"
你也可以将它修补到String
课程(我不喜欢)
答案 1 :(得分:1)
似乎Kernel#sprintf
可以相当简单地解决这个问题:
str = "foo-bar"
sprintf("%3.3s%s",str,str[4..-1])
#=> "foobar"
或者只是
sprintf("%s%s",str[0..2],str[4..-1])
#=> "foobar"
另外Enumerable
方法可能会有所帮助,但似乎有点过分,例如
str.each_char.with_index.reduce("") do |memo,(s,i)|
i == 3 ? memo : memo << s
end
#=> "foobar"