我有一个字符串列表。每个字符串都以我想要删除的n个字符开头。
我无法使用"123" <> new_string = old_string
之类的内容,因为字符可以是。
所以我想做这样的事情:
my_list |> Enum.map(fn(str) ->
# Remove the n leading characters from str
end)
你知道我怎么能做到这一点吗?
答案 0 :(得分:10)
您可以使用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²"
答案 1 :(得分: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。