如何在Erlang中从列表或字符串中删除一个字符?

3
如何从列表(或称为字符串)中删除字符/
List = "/hi"
2个回答

7

由于Erlang中的字符串是字符列表,从字符串中删除第一个字符的一般方法是使用lists:delete/2函数:

1> List = "/hi".
"/hi"
2> lists:delete($/, List).
"hi"

构造函数 $/ 是Erlang字符字面量,表示/字符。
请注意,无论要删除的字符在字符串中的位置如何,此方法都有效:
3> List2 = "one/word".
"one/word"
4> lists:delete($/, List2).
"oneword"

请记住,使用这种方法只能删除字符的第一个出现。如果要删除所有出现的字符,请先使用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"]

请注意,string:tokens/2将其分隔符作为一个列表而不仅仅是单个元素,因此这次我们的分隔符是"/"(或等价的[$/])。我们的结果Segments是一个字符串列表,现在我们需要将它们拼接回来。我们可以使用lists:flatten/1string:join/2来完成这一点:
7> lists:flatten(Segments).
"thislookslikealongpathname"
8> string:join(Segments, "").
"thislookslikealongpathname"
string:join/2 的第二个参数是您可以在段之间插入的分隔符,但在这里,我们只使用空字符串。

你的回答比我更全面。 - jub0bs
这应该被标记为已接受的答案。 - Sumit Trehan

5
由于Erlang变量是不可变的,因此在使用它们时需要特别注意。
List = "/hi".

List绑定到表达式"\hi",您不能简单地从List中删除任何内容;事实上,只要List仍然被绑定,您不能以任何方式更改List
相反,您可以将另一个变量(下面称为T)绑定到List的尾部,如下所示:
1> List = "/hi".
"/hi"
2> T=tl(List).
"/hi"
3> T.
"hi"

1
在这种情况下,也可以使用tl(List)。 - user4651282
@Atomic_alarm 是的,它比模式匹配更直接。 - jub0bs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接