【问题标题】:Check if string starts with other string in Haskell检查字符串是否以 Haskell 中的其他字符串开头
【发布时间】:2020-01-05 02:02:52
【问题描述】:

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

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

Haskell 有这样的功能吗?

【问题讨论】:

  • Close voters:这个问题不要求任何场外资源。
  • @4castle 以这种方式问自己这个问题:有大量的标准库,其中可能包含数十万个函数。 StackOverflow 对 Hackage 的每个函数都有一个问题有用吗?我知道我的答案:坚定而响亮的“不”。它不仅浪费了多余的工作,而且比 Hackage 本身更难搜索,因为 SO 没有类似 Hoogle 的功能。
  • @DanielWagner 我同意,不应该对每个功能都有问题。这并不意味着它是题外话。那将是一个不赞成的理由。不过这个函数挺标准的,我记得之前搜索过这个函数,没想过用“前缀”这个词,所以我不反对。

标签: haskell


【解决方案1】:

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

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

例子:

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

【讨论】:

    【解决方案2】:

    Data.Text

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

    {-# LANGUAGE OverloadedStrings #-}
    import qualified Data.Text as T
    
    T.isPrefixOf "(" "(test string)"
    

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

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

    【讨论】:

    • 自答题外的问题并不能使其成为话题。
    • 对于Strings,您可以使用isPrefix :: Eq a =&gt; [a] -&gt; [a] -&gt; Bool。这对于大字符串当然效率较低。
    • @chepner 这个问题不是在寻找场外资源,并且在这里不需要尝试解决问题中的问题,因为它是自我回答的,因此没有风险喂一个帮助吸血鬼。
    • @chepner 回答是大声推荐异地资源,但问题不能问他们。
    • 这不是一个好的答案,因为它不必要地将类型从String 限制为Text,而没有提及如何在两个, the advantages or disadvantages of the two, or a String 特定解决方案之间进行转换。问题是“字符串”,所以请回答有关字符串的问题!
    猜你喜欢
    • 2011-05-04
    • 2023-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多