Erlang中文手册(Erldoc.com)  »  string  »  tokens/2
Erlang并发编程 Erlang/OTP设计原理 Erlang/OTP[pdf] Mnesia用户手册[pdf] Erlang完整手册[en] 官网手册[en] 模块列表 方法列表 随机 Erlang中文社区(BBS) 美女图库

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)).
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9