在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)
如果你想获得没有首字母的子字符串,你也可以使用:
"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)