【问题标题】:How to remove the firsts n characters from a string in Elixir?如何从 Elixir 中的字符串中删除前 n 个字符?
【发布时间】:2020-06-29 03:22:36
【问题描述】:

我有一个字符串列表。这些字符串中的每一个都以我想要删除的 n 个字符开头。

我不能使用像"123" <> new_string = old_string 这样的东西,因为字符可以是任何东西

所以我想做这样的事情:

my_list |> Enum.map(fn(str) ->
  # Remove the n leading characters from str
end)

你知道我是怎么做到的吗?

【问题讨论】:

    标签: string elixir


    【解决方案1】:

    您可以使用String.slice/2 删除字符串的前N 个字素,使用binary_part/3 或模式匹配删除字符串的前N 个字节。

    设置:

    iex(1)> a = "abc"
    "abc"
    iex(2)> b = "πr²"
    "πr²"
    

    删除字符串的前 2 个字素:

    iex(3)> String.slice(a, 2..-1)
    "c"
    iex(4)> String.slice(b, 2..-1)
    "²"
    

    删除字符串的前 2 个字节:

    iex(5)> binary_part(a, 2, byte_size(a) - 2)
    "c"
    iex(6)> binary_part(b, 2, byte_size(b) - 2)
    "r²"
    iex(7)> remove = 2
    2
    iex(8)> <<_::binary-size(remove), rest::binary>> = a; rest
    "c"
    iex(9)> <<_::binary-size(remove), rest::binary>> = b; rest
    "r²"
    

    【讨论】:

      【解决方案2】:

      另一种选择:

      defmodule StringExtensions do
        def remove_first_n_chars(s, n) do
          {_, new_string} = s |> String.codepoints() |> Enum.split(n)
          new_string |> Enum.join()
        end
      end
      

      然后会像这样使用:

      l = ["abcdefg","hijklmno","pqrstuv"]
      
      l2 = l |> Enum.map(fn str -> StringExtensions.remove_first_n_chars(str,2) end) # l2 -> ["cdefg", "jklmno", "rstuv"]
      

      只是想提供一个潜在的替代方案,FWIW。

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 1970-01-01
        • 2011-05-10
        • 2011-11-03
        • 1970-01-01
        • 2012-09-23
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多