- Elixir 教程
- Elixir - 主页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 操作员
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 弦乐
- Elixir - 角色列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 地图
- Elixir - 模块
- Elixir - 别名
- Elixir - 功能
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 流程
- 长生不老药 - 印记
- Elixir - 领悟
- Elixir - 类型规格
- Elixir - Behave
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 图书馆
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用的资源
- Elixir - 讨论
Elixir - 弦乐
Elixir 中的字符串插入在双引号之间,并以 UTF-8 编码。与默认字符串采用 ASCII 编码且只能包含 256 个不同字符的 C 和 C++ 不同,UTF-8 由 1,112,064 个代码点组成。这意味着 UTF-8 编码由许多不同的可能字符组成。由于字符串使用 utf-8,因此我们还可以使用以下符号:ö、ł 等。
创建一个字符串
要创建字符串变量,只需将字符串分配给变量 -
str = "Hello world"
要将其打印到控制台,只需调用IO.puts函数并向其传递变量 str -
str = str = "Hello world" IO.puts(str)
上述程序生成以下结果 -
Hello World
空字符串
您可以使用字符串文字""创建一个空字符串。例如,
a = "" if String.length(a) === 0 do IO.puts("a is an empty string") end
上述程序生成以下结果。
a is an empty string
字符串插值
字符串插值是一种通过将常量、变量、文字和表达式的值包含在字符串文字中来构造新字符串值的方法。Elixir 支持字符串插值,要在字符串中使用变量,在编写字符串时,用大括号括起来,并在大括号前面加上“#”符号。
例如,
x = "Apocalypse" y = "X-men #{x}" IO.puts(y)
这将取 x 的值并将其替换为 y。上面的代码将生成以下结果 -
X-men Apocalypse
字符串连接
我们已经在前面的章节中看到了字符串连接的使用。'<>' 运算符用于连接 Elixir 中的字符串。要连接 2 个字符串,
x = "Dark" y = "Knight" z = x <> " " <> y IO.puts(z)
上面的代码生成以下结果 -
Dark Knight
字符串长度
要获取字符串的长度,我们使用String.length函数。将字符串作为参数传递,它会显示它的大小。例如,
IO.puts(String.length("Hello"))
运行上面的程序时,它会产生以下结果 -
5
反转字符串
要反转字符串,请将其传递给 String.reverse 函数。例如,
IO.puts(String.reverse("Elixir"))
上述程序生成以下结果 -
rixilE
字符串比较
要比较 2 个字符串,我们可以使用 == 或 === 运算符。例如,
var_1 = "Hello world" var_2 = "Hello Elixir" if var_1 === var_2 do IO.puts("#{var_1} and #{var_2} are the same") else IO.puts("#{var_1} and #{var_2} are not the same") end
上述程序生成以下结果 -
Hello world and Hello elixir are not the same.
字符串匹配
我们已经看到了 =~ 字符串匹配运算符的使用。要检查字符串是否与正则表达式匹配,我们还可以使用字符串匹配运算符或 String.match? 功能。例如,
IO.puts(String.match?("foo", ~r/foo/)) IO.puts(String.match?("bar", ~r/foo/))
上述程序生成以下结果 -
true false
这同样可以通过使用 =~ 运算符来实现。例如,
IO.puts("foo" =~ ~r/foo/)
上述程序生成以下结果 -
true
字符串函数
Elixir 支持大量与字符串相关的函数,下表列出了一些最常用的函数。
先生。 | 功能及其目的 |
---|---|
1 | 在(字符串,位置) 返回给定 utf8 字符串位置的字素。如果位置大于字符串长度,则返回 nil |
2 | 大写(字符串) 将给定字符串中的第一个字符转换为大写,其余字符转换为小写 |
3 | 包含?(字符串,内容) 检查字符串是否包含任何给定内容 |
4 | 小写(字符串) 将给定字符串中的所有字符转换为小写 |
5 | 结尾为?(字符串,后缀) 如果字符串以给定的任何后缀结尾,则返回 true |
6 | 第一个(字符串) 返回 utf8 字符串中的第一个字素,如果字符串为空则返回 nil |
7 |
最后(字符串) 返回 utf8 字符串的最后一个字素,如果字符串为空则返回 nil |
8 |
替换(主题、模式、替换、选项 \\ []) 返回通过用替换替换主题中出现的模式而创建的新字符串 |
9 |
切片(字符串,开始,长度) 返回从偏移量 start 开始、长度为 len 的子字符串 |
10 |
分割(字符串) 在每个 Unicode 空格出现处将字符串划分为子字符串,并忽略前导和尾随空格。空白组被视为单个出现。不间断空白处不会发生除法 |
11 |
大写(字符串) 将给定字符串中的所有字符转换为大写 |
二进制文件
二进制只是一个字节序列。二进制文件使用<< >>定义。例如:
<< 0, 1, 2, 3 >>
当然,这些字节可以以任何方式组织,即使按照不能使它们成为有效字符串的顺序也是如此。例如,
<< 239, 191, 191 >>
字符串也是二进制的。而字符串连接运算符<>实际上是一个二进制连接运算符:
IO.puts(<< 0, 1 >> <> << 2, 3 >>)
上面的代码生成以下结果 -
<< 0, 1, 2, 3 >>
请注意 ł 字符。由于这是 utf-8 编码的,因此该字符表示占用 2 个字节。
由于二进制中表示的每个数字都是一个字节,因此当该值从 255 增加时,它会被截断。为了防止这种情况,我们使用大小修饰符来指定我们希望该数字占用多少位。例如 -
IO.puts(<< 256 >>) # truncated, it'll print << 0 >> IO.puts(<< 256 :: size(16) >>) #Takes 16 bits/2 bytes, will print << 1, 0 >>
上述程序将生成以下结果 -
<< 0 >> << 1, 0 >>
我们还可以使用 utf8 修饰符,如果一个字符是代码点,那么它将在输出中产生;否则字节 -
IO.puts(<< 256 :: utf8 >>)
上述程序生成以下结果 -
Ā
我们还有一个名为is_binary的函数,用于检查给定变量是否为二进制。请注意,只有存储为 8 位倍数的变量才是二进制。
位串
如果我们使用大小修饰符定义一个二进制文件并传递给它一个不是 8 倍数的值,我们最终会得到一个位串而不是二进制文件。例如,
bs = << 1 :: size(1) >> IO.puts(bs) IO.puts(is_binary(bs)) IO.puts(is_bitstring(bs))
上述程序生成以下结果 -
<< 1::size(1) >> false true
这意味着变量bs不是二进制而是位串。我们也可以说二进制是一个位串,其中位数可以被 8 整除。模式匹配对二进制和位串的工作方式相同。