Прості строки у ерлангу представлені списками,
у яких кожен символ - це число-код,
тому з ними може бути незручно і незвично працювати:
1> [1,2,3].
[1,2,3]
2> [83,117,114,112,114,105,115,101].
"Surprise"
натомість у ерлангу класно працювати з бінарними строками
обєднання
обєднаємо декілька бінарних строк (для кирилиці явно укажемо utf8 щоб все було класно)
3> B1 = <<"1,2">>.
<<"1,2">>
4> B2 = <<"3,4">>.
<<"3,4">>
5> B3 = <<" зайчик"/utf8>>.
<<32,208,183,208,176,208,185,209,135,208,184,208,186>>
6> B4 = <<B1/binary, B2/binary, B3/binary>>.
<<49,44,50,51,44,52,32,208,183,208,176,208,185,209,135,208,184,208,186>>
обєднаємо строки "спискові" (тут, нажаль, кирилицю ніяк не впихнути (або я поки не знаю як) )
7> B5 = iolist_to_binary(["1,2","3,4","zaika"]).
<<"1,23,4zaika">>
також можна написати власну функцію для обєднання двох списків :
lj(A,[]) -> A.
lj(A,B) ->
[C1|C2] = B,
lj([A|C1],C2).
тут ми беремо і "переливаємо" список B у список A, і коли список B стає "пустим" - повертаємо список A
також для обєднання списків ще можна використати (проте не рекомендується - відносно повільно)
8> C1 = [1,2,3].
[1,2,3]
9> C2 = [4,5,7].
[4,5,7]
10> C3 = C1 ++ C2.
[1,2,3,4,5,7]
натомість рекомендується додавати у [Head|Tail],
що ми і зробили у функції вище
проте, ми розпочали про строки --
11> A1 = "abc".
"abc"
12> A2 = "efa".
"efa"
13> string:join([A1,A2],"-").
"abc-efa"
розділення
У випадку з бінарним списком - ми можемо його перебрати і вибрати потрібні нам значення -
наприклад парні
11> C1 = [1,2,3,4,5,7].
[1,2,3,4,5,7]
12> [C || C <- C1, C rem 2 =:= 0].
[2,4]
або ті, які більше 3
11> C1 = [1,2,3,4,5,7].
[1,2,3,4,5,7]
12> [C || C <- C1, C > 3].
[4,5,7]
проте, ми розпочали про строки --
13> re:split("red - blue", "-", [{return, list}]).
["red "," blue"]
14> re:split("Hello.world.howdy?", "[.]", [{return, list}]).
["Hello","world","howdy?"]
а також
15> string:sub_string("Hello World", 4, 8).
"lo Wo"
і на завершення - про бінарні строки :
22> Bin = <<"Hello.world.howdy?">>.
<<"Hello.world.howdy?">>
23> binary:split(Bin, <<".">>, [global]).
[<<"Hello">>,<<"world">>,<<"howdy?">>]
,
16> A1 = <<"abcde">>.
<<"abcde">>
17> <<A2:4/binary,A3/binary>> = A1.
<<"abcde">>
18> A2.
<<"abcd">>
19> A3.
<<"e">>
а також
20> S1 = <<"some_____text">>.
<<"some_____text">>
21> S2 = binary:part(S1,{0,4}).
<<"some">>
------
довжина бінарних строк --
A = erlang:byte_size(Binary),
A2 = erlang:size(Binary),
------
крім того для можливості гарячого оновлення коду - потрібно використовувати глобальні виклики власних функцій замість локальних,
тобто ми можемо так переписати власну функцію для обєднання двох списків :
lj(A,[]) -> A.
lj(A,B) ->
[C1|C2] = B,
?MODULE:lj([A|C1],C2).