string:tokens/2
使用分隔符把字符串分割
用法:
tokens(String, SeparatorList) -> Tokens
内部实现:
%% tokens(String, Seperators). %% Return a list of tokens seperated by characters in Seperators. -spec tokens(String, SeparatorList) -> Tokens when String :: string(), SeparatorList :: string(), Tokens :: [Token :: nonempty_string()]. tokens(S, Seps) -> tokens1(S, Seps, []). tokens1([C|S], Seps, Toks) -> case member(C, Seps) of true -> tokens1(S, Seps, Toks); false -> tokens2(S, Seps, Toks, [C]) end; tokens1([], _Seps, Toks) -> reverse(Toks). tokens2([C|S], Seps, Toks, Cs) -> case member(C, Seps) of true -> tokens1(S, Seps, [reverse(Cs)|Toks]); false -> tokens2(S, Seps, Toks, [C|Cs]) end; tokens2([], _Seps, Toks, Cs) -> reverse([reverse(Cs)|Toks]).
用分隔符把字符串 String 分割成一个字符串列表,分隔符参数 SeparatorList 可以为一个或多个符号。
string:tokens("a-b-c-d-e", "-").
string:tokens("abcdefghi jklmn", "bf l").
string:tokens/2 不支持 "空分隔符" 分割,因此不能把 "abcd" 这样的字符串里的每一个字符分割成 ["a", "b", "c", "d"],不过利用 string:substr/3 函数实现。
Str = "abcd", Len = length(Str), F = fun(Start, AccList) -> Element = string:substr(Str, Start, 1), [Element | AccList] end, lists:foldr(F, [], lists:seq(1, Len)).