如何删除给定索引处的字符串?

时间:2018-05-23 09:36:34

标签: ruby string

我有一个字符串,例如

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"

但是,duptap看起来非常麻烦。有更简洁的方法吗?

2 个答案:

答案 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"