首页 > 解决方案 > Haskell:从字符串中提取整数

问题描述

你好我有这个String

"(33,18,109)"

如何从该字符串中提取整数以对其应用函数?

谢谢你。

标签: haskell

解决方案


最直接的方法是使用read "(33,18,109)" :: (Int,Int,Int),但这不是一个好方法,因为它不处理失败(例如读取"(21,3,not valid)"(21,43)会导致错误。

更好的方法是使用readMaybe "(1,2,3) :: Maybe (Int,Int,Int)". 结果使用 aMaybe表示可能的失败:

import Text.Read

ans :: String -> Maybe (Int,Int,Int)
ans = readMaybe
ans "(12,53,29)" == Just (12,53,29)
ans "not a valid string" == Nothing

但是,您可能想先看看您是如何得到一个字符串的。是因为执行 IO 操作(例如从文件中读取)吗?如果不是,通常您不必直接处理某事物的字符串表示然后对其进行操作(因为这违反了抽象层)。

此外,还有一个名为 Parser Combinator 的主题,用于处理 Haskell 中的解析。但是,如果您的任务是只解析 3 个数字而不是解析算术表达式(例如 )等更复杂的事情,那么这将是非常无关紧要的1+2*3


推荐阅读