elixir中的String.split()将空字符串放在输出中的子字符串列表的末尾

时间:2017-08-23 22:08:40

标签: split elixir

我是Elixir的新手。我正在尝试对split字符串进行基本操作,如下所示

String.split("Awesome","");

根据elixir document,它应该split基于提供的模式的字符串。我得到的output如下

["A", "w", "e", "s", "o", "m", "e", ""]

我期待output如下

["A", "w", "e", "s", "o", "m", "e"]

我的ElixirElang版本如下

Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Elixir 1.5.1

我无法理解为什么在输出中empty string的{​​{1}}添加了end。有人能让我知道为什么我得到上面的输出并帮助预期输出吗?

1 个答案:

答案 0 :(得分:6)

我猜这是预期的行为。 link you provided也说了以下内容:

  

如果:trim选项设置为true,则仅从结果中删除空字符串。

这是解决方案的一个例子:

  

拆分空图案会返回字形:

iex> String.split("abc", "")
["a", "b", "c", ""]

iex> String.split("abc", "", trim: true)
["a", "b", "c"]

如果您想知道什么是“字素”,那么Elixir文档也会在String documentation的开头解释这一点。

最后,如果你想深入研究字形,还有另外两个有用的功能:String.codepoints/1String.graphemes/1。例如:

iex> noel = "noe\u0308l"
"noël"
iex> String.codepoints(noel)
["n", "o", "e", "̈", "l"]
iex> String.graphemes(noel)
["n", "o", "ë", "l"]

# Let's try with your example
iex> String.codepoints("Awesome")
["A", "w", "e", "s", "o", "m", "e"]
iex> String.graphemes("Awesome")
["A", "w", "e", "s", "o", "m", "e"]