You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改原字符串的情况下移除指定索引的字符?

当然有更简洁的实现方式!不用dup和tap也能轻松搞定,而且完全不会改动原字符串,给你推荐几种Ruby风格的写法:

1. 切片拼接(最直观高效)

直接通过字符串切片截取目标前后的部分再拼接,这是最简洁也最易读的方式:

string = 'foo-bar'
new_string = string[0...3] + string[4..-1]
# => "foobar"
string # => "foo-bar" # 原字符串完好无损

解释一下:[0...3]取的是索引0到2的字符(左闭右开,不包含索引3),[4..-1]则是从索引4一直取到字符串末尾,两者拼接就自动跳过了索引3的字符。

2. 转数组过滤后拼接

如果需要更灵活的条件(比如跳过多个索引),可以把字符串转成字符数组,过滤掉指定索引的元素后再拼接回去:

new_string = string.chars.reject.with_index { |_, idx| idx == 3 }.join
# => "foobar"

这种写法扩展性更强,比如要跳过索引3和5的字符,只需要把条件改成idx == 3 || idx ==5就行。

3. 紧凑链式写法

如果你偏好链式调用,也可以用dup搭配delete_at写成一行,比tap的写法更直观:

new_string = string.dup.delete_at(3)
# => "foobar"

虽然用到了dup,但写法比tap版本更紧凑,逻辑清晰:先复制原字符串,再删除复制版的指定索引字符,原字符串不受影响。

对比下来,第一种切片拼接的方式是最适合你的需求的——代码短、效率高,一眼就能看懂逻辑。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:54