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

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

List = "/hi"

【问题讨论】:

    标签: erlang erl


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

    【讨论】:

    • 你的回答比我的要全面得多。
    • 这应该被标记为接受的答案。
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2021-10-26
    • 2015-10-25
    • 1970-01-01
    • 2021-06-24
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多