Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在Haskell中用另一个字符串替换字符串的子字符串,而不使用诸如MissingH之类的外部库?_String_Haskell_Substring - Fatal编程技术网

String 如何在Haskell中用另一个字符串替换字符串的子字符串,而不使用诸如MissingH之类的外部库?

String 如何在Haskell中用另一个字符串替换字符串的子字符串,而不使用诸如MissingH之类的外部库?,string,haskell,substring,String,Haskell,Substring,我想在Haskell中将子字符串替换为字符串,而不使用外部库,如果可能的话,还可以使用良好的性能 我考虑过使用replace函数,但我不想将整个程序移植到使用文本类型而不是字符串。将字符串打包为文本值,然后替换我想要的内容,然后将该文本值解包为字符串会不会在很多字符串上变慢 试试这个(未测试): 但一般来说,将程序切换为使用文本s而不是字符串s会提高性能。以下是我的解决方案 import Data.List (intercalate) import Data.List.Split (splitO

我想在Haskell中将子字符串替换为字符串,而不使用外部库,如果可能的话,还可以使用良好的性能

我考虑过使用replace函数,但我不想将整个程序移植到使用
文本
类型而不是
字符串
。将
字符串
打包为
文本
值,然后替换我想要的内容,然后将该文本值解包为
字符串
会不会在很多
字符串
上变慢

试试这个(未测试):

但一般来说,将程序切换为使用
文本
s而不是
字符串
s会提高性能。

以下是我的解决方案

import Data.List (intercalate)
import Data.List.Split (splitOn)

replace from to = intercalate to . splitOn from
范例

replace "squirrel" "platypus" "Daddy, I want a squirrel !"

爸爸,我想要一只鸭嘴兽

对于“良好性能”的许多解释,您需要将
字符串
替换为
文本
。将整个程序移植为使用
文本
而不是
字符串
不太可能是困难的,只是单调乏味。有些情况下,API使用
String
s而不选择使用
Text
/
ByteString
,但在大多数情况下,这只是在一个位置更改类型,然后更正在其他位置出现的类型错误。如果要替换
Data.Text
,请使用ok,我要把我的程序移植到文本类型,但是我怎样才能把文件读成文本而不是字符串呢?没有类似于使用ByTestRing的函数。我只是将字符串转换为文本类型吗?@nils8950没有用于此的函数@汤马斯·杜布森谢谢!!不知什么原因,我没有找到。@nils8950可能是因为你没有使用
hoogle
grep
!至少从80年代起,眼球一直是劣质工具;-)
replace "squirrel" "platypus" "Daddy, I want a squirrel !"