📜  Elixir-字符串(1)

📅  最后修改于: 2023-12-03 15:00:35.596000             🧑  作者: Mango

Elixir 中的字符串

Elixir 是一种多用途编程语言,它支持多种数据类型,其中之一就是字符串。在 Elixir 中,字符串是一个连续的 Unicode 字符序列,可以使用单引号或双引号来定义。

定义字符串

在 Elixir 中,可以使用单引号或双引号来定义字符串。使用单引号定义的字符串,其内容仅限于 ASCII 字符集,而使用双引号定义的字符串则支持 Unicode 字符集。

iex> a = 'Hello'
'Hello'
iex> b = "你好"
"你好"
iex> is_binary(a)
false
iex> is_binary(b)
true
操作字符串

可以使用许多内置的函数来操作字符串。

连接字符串

可以使用 <> 运算符或 String.concat/2 函数来连接字符串。

iex> "Hello " <> "world"
"Hello world"
iex> String.concat("Hello ", "world")
"Hello world"
输出字符串

可以使用 IO.puts/1 函数来输出字符串。如果要输出格式化的字符串,可以使用 IO.puts/2 函数。

iex> IO.puts("Hello world")
Hello world
:ok
iex> IO.puts("Hello ~s", "world")
Hello world
:ok
获取字符串长度

可以使用 String.length/1 函数来获取字符串的长度。

iex> a = "Hello"
"Hello"
iex> String.length(a)
5
查找子字符串

可以使用 String.contains?/2 函数来查找字符串中是否包含指定子字符串。

iex> a = "Hello"
"Hello"
iex> String.contains?(a, "ll")
true
iex> String.contains?(a, "z")
false
截取字符串

可以使用 String.slice/2 函数来截取字符串。

iex> a = "Hello"
"Hello"
iex> String.slice(a, 2..4)
"llo"
Unicode 常规化

Unicode 有一种称为“字符规范化”的概念,意味着以不同方式编写的相同字母可能具有不同的 Unicode 编码,这可能会导致字符串比较和搜索错误。为了避免这种情况,可以使用内置的 String.normalise/1 函数来将字符串转换为指定的 Unicode 正规化表单,以进行更好地比较。

iex> s1 = "é"
"é"
iex> s2 = "é"
"é"
iex> s1 == s2
false
iex> s1_normalised = String.normalise(s1, :nfd)
"é"
iex> s2_normalised = String.normalise(s2, :nfd)
"é"
iex> s1_normalised == s2_normalised
true
结论

Elixir 中的字符串是 Unicode 字符序列,支持使用单引号或双引号进行定义。可以使用多个内置函数对字符串进行操作,例如连接、输出、获取长度、查找子字符串和截取字符串。另外,可以使用 String.normalise/1 函数来将字符串转换为指定的 Unicode 正规化表单,以进行更好地比较。