【发布时间】:2016-06-21 22:21:44
【问题描述】:
我在树莓派(机器类型 armv61,debian jessie)上使用 Clozure CL 1.11 通过 ojdbc7.jar 运行 oracle 查询:
(defun query (statement)
(let ((options ; compiled java filename is Query.class
(list "-cp" "/java-files-dir/ojdbc7.jar:/java-files-dir/" "Query" statement))))))
(with-output-to-string
(stream)
(ccl:run-program "java" options :output stream))))
结果如下:
"DAVY
JONES
"
当我将结果字符串强制转换为列表时,我看到列由#\ 和#\Newline 分隔,而字符串的末尾包含一个#\ 和两个#\Newline 字符:
(#\D #\A #\V #\Y #\ #\Newline #\J #\O #\N #\E #\S #\ #\Newline #\Newline)
我彻底阅读了this answer 和CLHS,但仍然无法理解为什么string-trim 不能用#\newline、#\linefeed 或#\return 修剪任何东西,并且
(cl-ppcre:regex-replace "#\Newline" (query "...statement...") "")
(cl-ppcre:regex-replace #\Newline (query "...statement...") "")
也不起作用,而
(cl-ppcre:split #\Newline (query "...statement..."))
成功将列拆分为("DAVY " "JONES ") 之类的列表。
编辑
我注意到上面带有删除线的代码"#\Newline" 显然引起了混淆,我可能将字符串修剪称为“#\Newline”,但这是一个错字。
调用(cl-ppcre:regex-replace #\newline ...) 和(string-trim '(#\Newline) ...) 都无法摆脱#\newlines。
实际上我可以通过调用(cl-ppcre:split #\Newline 来处理我的工作,在某些情况下我什至可能更喜欢这样做。
但是,我想了解为什么用'(#\Newline) 调用string-trim 会修剪字符串末尾的#\Newlines,但不能修剪单词之间的#\Newlines。
【问题讨论】:
-
string-trim的哪个电话不适合您?例如,在 Mac 上的 CCL 中,(string-trim '(#\Space #\Newline) string)可以正常工作。 -
@Renzo 我已经尝试了更广泛的列表。没有提到它以免使问题混乱
标签: string common-lisp newline