(defun trim-string (string &optional (char '(#\Space #\Tab #\Newline
#\Return #\Linefeed)))
(let ((chars (ensure-list char)))
(subseq string
(loop for index upfrom 0 below (length string)
when (not (member (aref string index) chars))
do (return index)
;; if we get here we're trimming the entire string
finally (return-from trim-string ""))
(loop for index downfrom (length string)
when (not (member (aref string (1- index)) chars))
do (return index)))))Source Context