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)).