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

Haskell如何检查字符串是否包含指定单词并实现搜索替换功能

字符串搜索替换实现方案

你之前的判断没错,elem仅用于判断元素是否存在于列表,无法实现子串替换需求,你可以通过以下两种方式实现功能:

方案1:使用text包(生产环境推荐)

Haskell生态的text包内置了成熟的子串替换函数,性能优于原生String操作,示例代码如下:

import qualified Data.Text as T
import Data.Text (pack, unpack)

main :: IO ()
main = do
  let origin = "Do you like cats AND dogs"
      -- 先将String转为Text,替换完成后再转回String
      result = unpack $ T.replace (pack "AND") (pack "OR") (pack origin)
  print result
  -- 输出结果:"Do you like cats OR dogs"

如果你的项目全程使用Text类型而非String,可以省去类型转换步骤,代码会更简洁。

方案2:自定义替换函数(无额外依赖)

如果你不想引入第三方依赖,可以自己实现针对String(即[Char])的替换函数,示例实现如下:

-- 泛用型列表子序列替换函数,可直接用于String类型
replace :: Eq a => [a] -> [a] -> [a] -> [a]
replace old new = go
  where
    go [] = []
    go s@(x:xs)
      | take (length old) s == old = new ++ go (drop (length old) s)
      | otherwise = x : go xs

main :: IO ()
main = do
  let origin = "Do you like cats AND dogs"
      result = replace "AND" "OR" origin
  print result
  -- 输出结果:"Do you like cats OR dogs"

注意:上述自定义实现未处理空搜索串这类边界情况,生产环境使用可自行补充边界校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:15:01