2012-09-20 70 views
2

我想將字符串轉換爲整數列表。將字符串轉換爲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] 

(或者我需要一個輔助函數?)

回答

8

這工作:

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} 

...所以你必須從這個元組中提取第一個元素來獲得實際的數字。

+0

我看了說明書,但並沒有意識到這是可能的。謝謝。 – marcus

3

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

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

從外殼:

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] 
0

[list_to_integer(X)|| X < -string:tokens(String,「」)]。