首页 > 解决方案 > 字符串修剪不适用于全局变量

问题描述

为什么字符串修剪不适用于 Common Lisp 中的全局变量?

(defvar *whitespaces* '(#\Space #\Newline #\Backspace #\Tab
                        #\Linefeed #\Page #\Return #\Rubout))
(defvar *str* "Hello     World")

(defun trim (s)
  (string-trim *whitespaces* s))

(print (trim *str*))
;; output "Hello     World"



标签: stringlispcommon-lisptrim

解决方案


手册中所述:

string-trim返回字符串的子字符串,其中字符包中的所有字符都从开头和结尾剥离。

所以,

CL-USER> (defvar *str* "   Hello     World     ")
*STR*
CL-USER> (trim *str*)
"Hello     World"

如果要删除单词之间的所有空格字符,可以使用一些库,例如cl-str

CL-USER> (ql:quickload "str")
...
CL-USER> (str:collapse-whitespaces *str*)
"Hello World"
T

推荐阅读