我有一些像这样的字符串:
'Set{[5, 6, 9]}'
'Set{[8, 4, "a", "[", 1]}'
'Set{[4, 8, "]", "%"]}'
我想从这些字符串中删除索引4和-2处的方括号,以便我有:
'Set{5, 6, 9}'
'Set{8, 4, "a", "[", 1}'
'Set{4, 8, "]", "%"}'
我该怎么做?
答案 0 :(得分:4)
我想你想要这个:
>> string = 'Set{[8, 4, "a", 6, 1]}'
=> "Set{[8, 4, \"a\", 6, 1]}"
>> string.gsub('{[', '{').gsub(']}', '}')
=> "Set{8, 4, \"a\", 6, 1}"
如果存在任何危险,您可能会在字符串中间看到'{['或']}'模式,并希望将其保留在那里,并且如果您确定相对于开头和结尾的位置每次都是字符串,你可以这样做:
>> string = 'Set{[8, 4, "a", 6, 1]}'
>> chars = string.chars
>> chars.delete_at(4)
>> chars.delete_at(-2)
>> chars.join
=> "Set{8, 4, \"a\", 6, 1}"
答案 1 :(得分:1)
由于您知道要删除的字符的位置,因此只需删除它们即可。以下方法分四步完成:
def remove_chars(str, *indices)
sz = str.size
indices.map { |i| i >= 0 ? i : sz + i }.sort.reverse_each { |i| str[i] = '' }
str
end
puts remove_chars('Set{[5, 6, 9]}', 4, -2 )
Set{5, 6, 9}
puts remove_chars('Set{[8, 4, "a", "[", 1]}', 4, -2 )
Set{8, 4, "a", "[", 1}
puts remove_chars('Set{[4, 8, "]", "%"]}', 4, -2 )
Set{4, 8, "]", "%"}
puts remove_chars('Set{[8, 4, "a", "[", 1]}', 23, 4, -2 )
Set{8, 4, "a", "[", 1
在最后一个示例中,字符串大小为24。
此方法会改变其运行的字符串。如果不更改字符串,请执行
remove_chars(str.dup, 4, -2 )
或向方法str_cpy = str.dup
添加第一行并对str_cpy`进行操作。