大小写转换函数用于更改单个字符或字符串内容的大小写形式。这些函数通常仅转换字母字符(即从 ‘A’ 到 ‘Z’、从 ‘a’ 到 ‘z’ 的字母,以及非-ASCII 字母);其他字符保持不变。你可以通过指定一个大小写转换表来自定义大小写转换的映射规则(see 大小写转换表)。
这些函数不会修改作为参数传入的字符串本身。
以下示例使用字符 ‘X’ 和 ‘x’,它们的 ASCII 码分别为 88 和 120。
该函数将 string-or-char(可以是单个字符或字符串)转换为小写形式。
当 string-or-char 是字符串时,函数返回一个新字符串,其中参数里所有大写字母均被转换为小写;当 string-or-char 是单个字符时,函数返回对应的小写字符(以整数形式表示);若原字符已是小写,或并非字母,则返回值与原字符相同。
(downcase "The cat in the hat")
⇒ "the cat in the hat"
(downcase ?X)
⇒ 120
该函数将 string-or-char(可以是单个字符或字符串)转换为大写形式。
当 string-or-char 是字符串时,函数返回一个新字符串,其中参数里所有小写字母均被转换为大写;当 string-or-char 是单个字符时,函数返回对应的大写字符(以整数形式表示);若原字符已是大写,或并非字母,则返回值与原字符相同。
(upcase "The cat in the hat")
⇒ "THE CAT IN THE HAT"
(upcase ?x)
⇒ 88
该函数对字符串或字符进行首字母大写格式化。如果 string-or-char 是字符串,函数会返回一个新字符串,其内容是 string-or-char原字符串 的副本,且其中每个单词都被首字母大写。这意味着:每个单词的第一个字符转为大写,其余字符均转为小写。
单词的定义是:在当前语法表中被归类为单词组成符语法类的连续字符序列(see Table of Syntax Classes);如果 case-symbols-as-words 非-nil,那么被归类为符号组成符语法类的字符也会被视为单词组成符。
当 string-or-char 是单个字符时,该函数的作用与 upcase 完全相同。
(capitalize "The cat in the hat")
⇒ "The Cat In The Hat"
(capitalize "THE 77TH-HATTED CAT")
⇒ "The 77th-Hatted Cat"
(capitalize ?x)
⇒ 88
如果 string-or-char 是字符串,此函数会将 string-or-char 中每个单词的首字母大写,不修改首字母以外的任何字母。它返回一个新字符串,内容是 string-or-char 的副本,其中每个单词的首字母被转换为大写。
此函数对 “单词” 的定义与上文 capitalize 中描述的一致,并且 case-symbols-as-words 对单词组成字符的作用也相同。
当 upcase-initials 的参数是一个字符时,其效果与 upcase 相同。
(upcase-initials "The CAT in the hAt")
⇒ "The CAT In The HAt"
注意:大小写转换并非码点的一一映射,结果的长度可能与参数长度不同。此外,由于传入字符会强制返回类型为字符,函数无法执行正确的替换,因此结果可能与处理单字符字符串时不同。例如:
(upcase "fi") ; note: single character, ligature "fi"
⇒ "FI"
(upcase ?fi)
⇒ 64257 ; i.e. ?fi
为避免这种情况,在将字符传入任一大小写转换函数之前,必须先使用 string 函数将其转换为字符串。当然,不能对结果的长度做任何假设。
其他字符也可能具有特殊的大小写转换规则。这些字符都拥有由 Unicode 标准定义的非-nil 字符属性 special-uppercase、special-lowercase 或 special-titlecase(see Character Properties)。这些属性定义的特殊大小写转换规则会覆盖当前的大小写转换表(see 大小写转换表)。
有关字符串比较的函数,see 字符与字符串的比较;其中部分函数会忽略大小写差异,或可选择忽略大小写差异。