You need to enable JavaScript to run this app. Haskell:如何实现字符串指定索引位置的字符替换?
优惠活动
大模型
产品
解决方案
定价
更多

Haskell:如何实现字符串指定索引位置的字符替换?

Haskell 指定索引替换字符串字符的实现

Haskell中的String本质是字符组成的链表[Char],实现指定索引的字符替换不需要引入额外依赖,用Prelude自带的列表操作就能完成,核心是把原字符串按目标索引拆分,替换对应位置的字符后重新拼接。

基础实现

实现时需要补充边界校验,避免负索引、索引超出字符串长度的场景下出现错误行为:

replace :: Int -> Char -> String -> String
replace index newChar str
  | index < 0 || index >= length str = str
  | otherwise =
      let (prefix, suffix) = splitAt index str
      in prefix ++ [newChar] ++ drop 1 suffix

等价写法

上面的逻辑可以用take、drop函数改写,效果完全一致:

replace :: Int -> Char -> String -> String
replace index newChar str
  | index < 0 || index >= length str = str
  | otherwise = take index str ++ [newChar] ++ drop (index + 1) str

示例验证

你给出的调用场景:

replace 4 '!' "Hello World!"

执行过程拆解:

  1. 按索引4把原字符串拆为两部分:前4个字符组成的前缀"Hell",从索引4开始的剩余后缀"o World!"
  2. 丢弃后缀的第一个字符(也就是原索引位置的旧字符o)
  3. 把前缀、新字符!、剩余后缀拼接起来,最终得到"Hell! World!",和预期输出完全匹配。

补充说明

  • 这种实现的时间复杂度为O(n),和字符串长度正相关,因为链表结构需要从头遍历到目标索引位置完成拆分,对于短文本场景完全够用;如果需要高频处理大段文本的替换操作,建议改用更高效的文本数据结构优化性能。
  • 边界校验不能省略:如果跳过校验,传入负索引或超出字符串长度的索引时,会错误地在字符串开头/末尾拼接多余字符,破坏原字符串结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 05:15:03