erlang字符串分割

本文介绍了一种使用 Erlang 实现的字符串分割函数,包括 split、split2 和 splitn 函数。这些函数能够根据指定的分隔符将字符串分割成多个部分,并支持不同级别的分割深度。通过一系列测试用例验证了函数的正确性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上代码:

split(L, Splitters) ->
    string:tokens(L, Splitters).

split2(L, Splitters)  ->
    case lists:any(fun(A) -> string:str(L,[A]) > 0 end, Splitters) of 
	true ->
	  [H|_] = split(L, Splitters),
	  T = string:substr(L,string:len(H)+2),
	  case length(T) of
	      0 ->
		[H];
	      _ ->
		[H,T]
	  end;
	_ ->
	  [L]
    end.

splitn(L, Splitters, N) ->
    splitn(L, Splitters, N, []).
splitn([], Splitters, N, NL) -> 
    NNL = lists:concat([[],NL]),
    lists:reverse(NNL);
splitn(L, Splitters, 1, NL) -> 
    [H|T] = split2(L, Splitters),
    NNL = lists:reverse(NL),
    case length(T) of
	0 ->
	  lists:concat([NNL, [H]]);
	_ ->
	  NT = lists:concat([T]),
	  lists:concat([NNL, [H], NT])
    end;
splitn(L, Splitters, N, NL) ->
    [H|[T]] = split2(L, Splitters),
    splitn(T, Splitters, N-1, [H|NL]).


测试用例:


split_test(_Config) ->
    A1 = "firstname",
    A2 = "secondname",
    A = string:join([A1, A2], ":"),
    B1 = "info1_1",
    B2 = "info1_2",
    B = string:join([B1, B2], ":"),
    C = "info2",
    D = "info3",
    E = "info4",
    F = "info5",
    G = "info6",

    List = string:join([A, B, C, D, E, F, G], ";"),
    [A,B,C,D,E,F,G] = mr_util:split(List, ";"),
    
    L1 = string:join([B,C,D,E,F,G],";"),
    [A,L1] = mr_util:split2(List, ";"),
    L2 = string:join([A2,B,C,D,E,F,G],";"),
    [A1,L2] = mr_util:split2(List, ";:"),
    
    L3 = string:join([C,D,E,F,G], ";"),
    [A,B,L3] = mr_util:splitn(List, ";", 2),
    L4 = string:join([D,E,F,G], ";"),
    [A,B,C,L4] = mr_util:splitn(List, ";", 3),
    L5 = string:join([B,C,D,E,F,G], ";"),
    [A1,A2,L5] = mr_util:splitn(List, ";:", 2),
    L6 = string:join([B2,C,D,E,F,G], ";"),
    [A1,A2,B1,L6] = mr_util:splitn(List, ";:", 3),
    ok.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值