在Erlang中将字符串转换为整数列表

时间:2012-09-20 06:21:43

标签: erlang

我正在尝试将字符串转换为整数列表。

  String = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08".

但是

  lists:map(fun(X) -> string:to_integer(X) end, string:tokens(String, " ")).

只是给了我......

  [{8,[]}, {2,[]}, {22,[]}, {97,[]}, ... , {91,[]}, {8,[]}]

有人可能会告诉我一个好/好的方式会得到什么?

  [8,2,22,97...91,8]

(或者我需要辅助功能吗?)

3 个答案:

答案 0 :(得分:7)

这有效:

String = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08".
lists:map(fun(X) -> {Int, _} = string:to_integer(X), 
                    Int end, 
          string:tokens(String, " ")).

> [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8]

请参阅,string:to_integer不返回单个整数,而是返回元组:

to_integer(String) -> {Int,Rest} | {error,Reason}

...所以你必须从这个元组中提取第一个元素以获得实际数字。

答案 1 :(得分:2)

此外,您可以使用列表生成器语法:

[begin {Int,_}=string:to_integer(Token), Int end|| Token<-string:tokens(String," ")].

来自shell:

1> String = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08".
"08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08"
2> 
2> [begin {Int,_}=string:to_integer(Token), Int end|| Token<-string:tokens(String," ")].
[8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8]

答案 2 :(得分:0)

[list_to_integer(X)|| X&lt; -string:tokens(String,&#34;&#34;)]。