4.1 字符串基础

字符和字符串的基础属性

字符是 一个 Lisp 对象,用来表示文本中单独的字符。在 Emacs Lisp 中,字符本质上是整型数;但是一个整型数究竟被当成字符还是整数,这要看其具体用法。关于整型数的字符表示,具体查阅 字符码 章节。

字符串是不变的字符序列。有一种数据类型叫做数组,数组一旦被创建,其长度便固定下来,而且不能再改变(详情查阅数组向量序列章节)。和 C 不同,Emacs Lisp 中的字符串不会被分隔符终止。

字符串是数组,因此也是序列。针对序列和数组的函数,同样可以用来操作字符串(这些函数可以在 序列 数组 向量 章节)。比如,你可以使用针对数组的 aref 函数来获取字符串中的单个字符。

Emacs 中的非ASCII字符有两种文本表示:单字节和多字节。对于大多的 Lisp 编程,你不需要特地区分这两种编码。详情查阅 文本表示章节。

有时,按键序列会以单字节字符串表示。当使用单字节字符串来表示按键序列时,在 128 到 255 区间的字符串元素表示 meta 字符,而不是 128 到 255 的字符码。字符串中无法储存 hyper,super以及alt 控制键;字符串中可以储存 ASCII 控制键,但无法储存其他的控制键。此外 Emacs 并不区分 ASCII 字符控制键的大小写。如果你想要储存这样的字符,比如按键序列,那你就不能使用字符串,而应该使用向量。更多按键输入字符,详情查阅 字符类型章节。

字符串同样被用来储存正则表达式。你可以使用 string-match 对字符串进行正则匹配。函数 match-string 和 replace-match 使用正则表达式对字符串进行分解好修改。

和缓冲区类似,字符串也可以储存具有文本属性的字符。详情查阅文本属性。Lisp 中很多拷贝文本的操作都会连文本属性一并拷贝。

查阅 文本 章节,以获取在缓冲区中展示和拷贝字符串的相关函数。查阅 字符类型和字符串类型章节,以获取关于 字符和字符串的语法表示。查阅 非ASCII字符章节,以获取字符串编码及解码相关的函数。此外要注意,函数 length 并不是用来计算 被显示的文本的长度;而应该使用 string-width函数。

最后更新于