从Elixir中的String获取子字符串

Ser*_*pia 8 string elixir

在Ruby中,我可以去:

"Sergio"[1..-1] #> "ergio"
Run Code Online (Sandbox Code Playgroud)

在Elixir中执行相同操作会产生运行时错误:

iex(1)> "Sergio"[1..-1]
** (CompileError) iex:1: the Access syntax and calls to Access.get/2 are not available for the value: "Sergio"
Run Code Online (Sandbox Code Playgroud)

还尝试过:

iex(1)> String.slice("Sergio", 1, -1)
** (FunctionClauseError) no function clause matching in String.slice/3
(elixir) lib/string.ex:1471: String.slice("Sergio", 1, -1)
Run Code Online (Sandbox Code Playgroud)

如何从Elixir中的字符串中获取子字符串?

Ser*_*pia 17

你可以使用String.slice/2:

iex(1)> String.slice("Sergio", 1..-1)
"ergio"
iex(2)> String.slice("Sergio", 0..-3)                
"Serg"
Run Code Online (Sandbox Code Playgroud)

  • @OnorioCatenacci 在这种情况下 -3 和 3 返回相同的内容。-3 从后面开始,从前面开始 3。 (2认同)

Pat*_*wak 5

如果你想获得没有首字母的子字符串,你也可以使用:

"Sergio" |> String.to_charlist() |> tl() |> to_string()
Run Code Online (Sandbox Code Playgroud)

另一种从末尾获取子字符串的方法是:

a = "Sergio"
len = String.length(a)
String.slice(a, -len + 1, len - 1) # "ergio"
#this -len + 1 is -1(len - 1) and it's exact to Ruby's -1 when slicing string.
Run Code Online (Sandbox Code Playgroud)