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

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.