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

Posted

技术标签:

【中文标题】如何从 Erlang 的列表或字符串中删除字符?【英文标题】:How do I remove a character from a list or string in Erlang? 【发布时间】:2015-12-09 13:24:30 【问题描述】:

如何从该列表中删除字符 /(或称其为字符串)

List = "/hi"

【问题讨论】:

【参考方案1】:

因为 Erlang 变量是不可变的并且

List = "/hi".

List 绑定到表达式"\hi",您不能简单地从List 中删除任何内容;事实上,只要 List 保持绑定状态,您就无法以任何方式更改它。

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

1> List = "/hi".
"/hi"
2> T=tl(List).
"/hi"
3> T.
"hi"

【讨论】:

这种情况下也可以使用tl(List)。 @Atomic_alarm 是;它比模式匹配更简单。【参考方案2】:

由于 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 的第二个参数是可以在段之间插入的分隔符,但在这里,我们只使用空字符串。

【讨论】:

你的回答比我的要全面得多。 这应该被标记为接受的答案。

以上是关于如何从 Erlang 的列表或字符串中删除字符?的主要内容,如果未能解决你的问题,请参考以下文章

从 Erlang 的列表中构建元组列表

二进制字符串erlang的第一个字

erlang中的字符串值

如何使用 io:fread 或 io:read 在 erlang 中获取带空格的字符串输入

如何将字符串空格分隔的键,唯一字的值对转换为字典

从列表中删除 nil - Erlang