LISP - 字符串大小写转换
Lisp - 字符串大小写转换
Section titled “Lisp - 字符串大小写转换”Common Lisp 提供了一套标准的函数,用于转换字符串中字符的大小写。这些函数主要有两种类型:构造性(非破坏性)和破坏性。
构造性转换(非破坏性)
Section titled “构造性转换(非破坏性)”这些函数返回一个新字符串,其中包含转换后的大小写,而原始字符串保持不变。这是更安全、更常见的方法。
| 函数 | 描述 |
|---|---|
| string-upcase | 返回一个新字符串,其中所有字母字符都转换为大写。 |
| string-downcase | 返回一个新字符串,其中所有字母字符都转换为小写。 |
| string-capitalize | 返回一个新字符串,其中每个单词的首字母大写。 |
这些函数就地修改原始字符串。它们通常以 n(表示“non-consing”)开头命名。请谨慎使用它们,因为如果字符串在程序的其他地方共享,它们可能会导致意想不到的行为。它们主要用于关键代码路径中的性能优化。
| 函数 | 描述 |
|---|---|
| nstring-upcase | 修改字符串,将所有字母字符转换为大写。 |
| nstring-downcase | 修改字符串,将所有字母字符转换为小写。 |
| nstring-capitalize | 修改字符串,将每个单词的首字母大写。 |
示例:构造性转换
Section titled “示例:构造性转换”创建一个 main.lisp 文件,看看非破坏性函数如何工作。
main.lisp
Section titled “main.lisp”;;; main.lisp - 演示字符串大小写转换
(let ((original-string "a big HELLO from tutorials point")) (format t "Original: ~s~%" original-string)
;; 构造性函数创建新字符串 (let ((lower (string-downcase original-string)) (upper (string-upcase original-string)) (capital (string-capitalize original-string)))
(format t "Downcased: ~s~%" lower) (format t "Upcased: ~s~%" upper) (format t "Capitalized: ~s~%" capital))
;; 原始字符串保持不变 (format t "After Ops: ~s~%" original-string))执行此代码将产生:
Original: "a big HELLO from tutorials point"Downcased: "a big hello from tutorials point"Upcased: "A BIG HELLO FROM TUTORIALS POINT"Capitalized: "A Big Hello From Tutorials Point"After Ops: "a big HELLO from tutorials point"使用 :start 和 :end 指定子序列
Section titled “使用 :start 和 :end 指定子序列”所有这些函数都接受可选的 :start 和 :end 关键字参数,以仅对字符串的一部分进行操作。索引是基于零的。
main.lisp(续)
Section titled “main.lisp(续)”(let ((my-string "a big hello from tutorials point")) (format t "~%Original: ~s~%" my-string)
;; 仅将单词 "hello" 转换为大写(从索引 6 到 11) (let ((partial-upper (string-upcase my-string :start 6 :end 11))) (format t "Partially Up: ~s~%" partial-upper)))这部分代码将输出:
Original: "a big hello from tutorials point"Partially Up: "a big HELLO from tutorials point"最佳实践和行业标准
Section titled “最佳实践和行业标准”- 优先选择非破坏性函数: 通常,始终使用非破坏性版本(如
string-upcase等),除非您遇到经过测量的性能瓶颈,并且确定原始字符串数据未在其他地方使用。函数纯度使代码更容易理解。 - 关键字参数:
:start和:end关键字参数是 Common Lisp 中所有序列函数(例如,列表、向量和字符串)的常见模式。掌握它们提供了一种一致的方式来操作子序列。 - Unicode 和字符集: 现代 Common Lisp 实现通常支持 Unicode。大小写转换函数适用于各种国际字符,而不仅仅是 ASCII。