如何从 Erlang 中的列表或字符串中删除字符?
How do I remove a character from a list or string in Erlang?
如何从此列表中删除字符 /
(或将其称为字符串)
List = "/hi"
因为 Erlang 变量是不可变的并且
List = "/hi".
将List
绑定到表达式"\hi"
,你不能简单地从List
中删除任何东西;事实上,只要 List
保持绑定状态,您就不能以任何方式更改它。
您可以做的是将另一个变量(下面称为 T
)绑定到 List
的尾部,如下所示:
1> List = "/hi".
"/hi"
2> T=tl(List).
"/hi"
3> T.
"hi"
由于 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/1
or string:join/2
:
7> lists:flatten(Segments).
"thislookslikealongpathname"
8> string:join(Segments, "").
"thislookslikealongpathname"
string:join/2
的第二个参数是一个分隔符,您可以在段之间插入,但在这里,我们只使用空字符串。
如何从此列表中删除字符 /
(或将其称为字符串)
List = "/hi"
因为 Erlang 变量是不可变的并且
List = "/hi".
将List
绑定到表达式"\hi"
,你不能简单地从List
中删除任何东西;事实上,只要 List
保持绑定状态,您就不能以任何方式更改它。
您可以做的是将另一个变量(下面称为 T
)绑定到 List
的尾部,如下所示:
1> List = "/hi".
"/hi"
2> T=tl(List).
"/hi"
3> T.
"hi"
由于 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/1
or string:join/2
:
7> lists:flatten(Segments).
"thislookslikealongpathname"
8> string:join(Segments, "").
"thislookslikealongpathname"
string:join/2
的第二个参数是一个分隔符,您可以在段之间插入,但在这里,我们只使用空字符串。