Elixir 字符串类型
本来想在上一章节 Elixir 基础类型 里把所有数据类型讲完的,看了下篇幅,不得了,还是分 P 说吧。后面的章节,我们干脆每个数据类型开一个新的章节吧,这样简单明了。
本章节我们主要讲讲 Elixir 中的字符串类型。
双引号字符串
Elixir 中的字符串用 双引号 ""
分隔,底层使用 UTF-8
编码
iex(95)> "简单教程" "简单教程"
注意:在 Windows 上运行,你的终端有可能默认不使用
UTF-8
。你可以在进入 iex 之前输入chcp 65001
来更改当前会话的编码。
使用反引号或者三个单引号或者三个双引号都是不可以的
iex(97)> `简单教程` ** (SyntaxError) iex:97:1: unexpected token: "`" (column 1, code point U+0060) iex(97)> """简单教程""" ** (SyntaxError) iex:97:1: heredoc allows only zero or more whitespace characters followed by a new line after """ iex(97)> '''简单教程''' ** (SyntaxError) iex:97:1: heredoc allows only zero or more whitespace characters followed by a new line after '''
至于单引号,结果如下
iex(96)> '简单教程' [31616, 21333, 25945, 31243]
看起来不像字符串,作用是什么,我们后续会讲到。保密,哈哈。
字符串插值
Elixir 还支持字符串插值。我们先来看看什么是字符串插值:
iex(97)> "hello #{:world}" "hello world"
所以,什么是字符串插值? #{:world}
什么意思?
通俗的来讲,这个插值,也叫 字符串格式化。这样大家就懂了吧。只不过 Elixir 使用 #{}
作为 占位符。
转义字符
支持转义字符简直就是编程语言的标配,Elixir 自然也不例外啊。
iex(7)> "简单 ...(7)> 教程" "简单\n教程" iex(8)> "简单\n教程" "简单\n教程"
第一个就是 先输入
"简单
然后按下回车再输入教程"
。
因为交互式命令行程序,所以直接输入 "简单\n教程"
看起来没什么变化,但如果你使用 IO 模块中的IO.puts/1
函数打印字符串,就会有感觉了
iex(11)> IO.puts "简单\n教程" 简单 教程 :ok
忽略最后的
:ok
原子,它表示输出成功而已。
字符串内部存储形式
Elixir 中的字符串在内部由 二进制字节序列 方式保存。
感觉有点描述的不清楚,大家看范例吧。
iex(12)> is_binary("简单教程") true iex(13)> is_binary("hello") true
Elixir 甚至还提供了 byte_size/1
函数来计算二进制序列的长度。
iex(14)> byte_size("简单教程") 12 iex(15)> byte_size("hellö") 6
你可能会很疑惑,简单教程
长度 12 可以理解,毕竟 utf-8
是变长,一个汉子由 3 个字节构成。但是 hellö
明明只有 5 个字符,为什么返回值为 6
呢?
注意啊!!!兄弟,是 ö
不是 o
啊,换成 o
就正常了
iex(15)> byte_size("hello") 5 iex(16)> byte_size("hellö") 6
如果你要获取字符串字符的数量,也不是不可以。Elixir 提供了 String.length/1
返回字符串的字符数量。
iex(17)> String.length("简单教程") 4 iex(18)> String.length("hello") 5 iex(19)> String.length("hellö") 5
String
模块提供了常见的字符串处理函数,比如将所有的小写字母转换为大些字母
iex(20)> String.upcase("hello") "HELLO"
更多 String 模块提供的的函数,自己翻文档去吧 https://hexdocs.pm/elixir/String.html