Erlang:获取字符串的前 n 个字符



我有信用卡号,假设5940043543536。出于安全考虑,我只想显示前四位数字。

如何在 erlang 中做到这一点?

Erlang 中的字符串只是一个整数列表,所以你可以使用lists:sublist/3

1> String = "5940043543536".
"5940043543536"
2> lists:sublist(String, 1, 4).
"5940"

请注意,位置参数从1开始,而不是从0开始。

如果您收到二进制(而不是字符串(

binary:part(<<"123455678901234">>, 1, 4).   
<<"2345">>

或者如果您需要获取最后四位数字

binary:part(<<"123455678901234">>, {byte_size(<<"123455678901234">>), -4}).
<<"1234">>

较新版本的 Erlang 内置了字符串函数。对于您的情况

1> string:slice("123455678901234", 1, 4). 
"1234"

还有一个 String:Substring 函数,它的工作方式相同,但它已被 slice 折旧。

您可以尝试使用模式匹配:

1> String = "5940043543536".
"5940043543536"
2> [A,B,C,D|_] = String.         
"5940043543536"
3> [A,B,C,D].               
"5940"

或者你可以创建自己的函数,例如:

1> String = "5940043543536".
"5940043543536"
2> GetDigits = fun F(_, Acc, 0) -> lists:reverse(Acc); 
F([H|T], Acc, N) -> F(T, [H|Acc], N - 1) end.
#Fun<erl_eval.43.91303403>
3> GetDigits(String, [], 4).
"5940"

最新更新