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
相关产品推荐
相关产品推荐

