检查Haskell中的字符串是否以其他字符串开头

10

我想知道我的字符串是否以另一个字符串开头。例如:

startsWith "(" "(test string)" == True

有没有内置在Haskell中的这样一个函数?

2
关闭投票者:这个问题并没有要求任何离线资源。 - 4castle
1
@4castle 用这种方式问自己一个问题:有一个庞大的标准库集合,其中可能有数十万个函数。对于StackOverflow来说,每个Hackage函数都有一个问题是有用的吗?我知道我的答案:坚定而响亮的“不”。这不仅是浪费和冗余的工作,而且比Hackage本身不易搜索,因为SO没有类似Hoogle的功能。 - Daniel Wagner
3
我同意,不应该为每个函数都提出问题,但这并不意味着它是离题的。这可能会成为一个降低投票的原因。然而,这个函数是相当标准的,我记得以前搜索过这个函数,没有想到使用“prefix”这个词,所以我不会降低投票。 - 4castle
2个回答

18

由于字符串是字符列表,我们可以导入 Data.List 并使用通用函数isPrefixOf

isPrefixOf :: Eq a => [a] -> [a] -> Bool

例子:

Prelude Data.List> isPrefixOf "abc" "abcxyz"
True

5

使用Data.Text

你可以使用isPrefixOf检查一个字符串是否以另一个字符串开头:

{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T

T.isPrefixOf "(" "(test string)"

要在您的项目中使用Data.Text,请在您的 Cabal 文件中将text添加为依赖项:

build-depends:
    base >=4.7 && <5
  , text

1
自问自答一个与主题无关的问题并不能使其变得相关。 - chepner
4
对于 String,您可以使用 isPrefix :: Eq a => [a] -> [a] -> Bool。当然,对于大字符串来说,这种方式效率较低。 - Willem Van Onsem
3
@chepner 这个问题不是在寻找离线资源,而且在问题中包含解决问题的尝试并不是必要的,因为它已经被自我回答了,因此没有喂养求助吸血鬼的风险。 - 4castle
1
@chepner的回答可以推荐外部资源,但问题不能要求它们。 - 4castle
2
这不是一个好的答案,因为它没有必要地将类型从“String”限制为“Text”,也没有提到如何在两者之间进行转换、两者的优缺点或针对“String”的特定解决方案。问题中提到了“string”,所以回答应该关于字符串! - AJF
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接