如何从Erlang中的列表中删除字符

emz*_*mzx 2 erlang erl

我正在尝试从列表中删除字符

例如 :

List = "/hi",
Run Code Online (Sandbox Code Playgroud)

所以我不想从List中删除这个"/"

我该怎么做?

Ste*_*ski 7

由于 Erlang 中的字符串是字符列表,因此从字符串中删除第一次出现的字符的一般方法是使用lists:delete/2

1> List = "/hi".
"/hi"
2> lists:delete($/, List).
"hi"
Run Code Online (Sandbox Code Playgroud)

构造$/是字符的 Erlang 字符字面量/

请注意,无论要删除的字符在字符串中的哪个位置,此方法都有效:

3> List2 = "one/word".
"one/word"
4> lists:delete($/, List2).
"oneword"
Run Code Online (Sandbox Code Playgroud)

请记住,使用这种方法,只会删除第一次出现的字符。要删除所有出现的内容,首先使用string:tokens/2在给定字符上拆分整个字符串:

5> List3 = "/this/looks/like/a/long/pathname".
"/this/looks/like/a/long/pathname"
6> Segments = string:tokens(List3, "/").
["this","looks","like","a","long","pathname"]
Run Code Online (Sandbox Code Playgroud)

请注意,string:tokens/2将其分隔符作为列表,而不仅仅是单个元素,所以这次我们的分隔符是"/"(或等效地,[$/])。我们的结果Segments是一个字符串列表,我们现在需要将它们重新连接在一起。我们可以使用lists:flatten/1string:join/2用于:

7> lists:flatten(Segments).
"thislookslikealongpathname"
8> string:join(Segments, "").
"thislookslikealongpathname"
Run Code Online (Sandbox Code Playgroud)

的第二个参数string:join/2是可以在段之间插入的分隔符,但在这里,我们只使用空字符串。


jub*_*0bs 5

因为Erlang变量是不可变的

List = "/hi".
Run Code Online (Sandbox Code Playgroud)

绑定List到表达式"\hi",你不能简单地删除任何东西List; 事实上,List只要它仍然受到约束,你就不能以任何方式改变.

你可以做的是将另一个变量(T下面称为)绑定到尾部List,如下所示:

1> List = "/hi".
"/hi"
2> T=tl(List).
"/hi"
3> T.
"hi"
Run Code Online (Sandbox Code Playgroud)