我想写一个if语句,根据字符串是否为空来做一些事情。例如:
(defun prepend-dot-if-not-empty (user-str)
(interactive "s")
(if (is-empty user-str)
(setq user-str (concat "." user-str)))
(message user-str))
在这个人为的例子中,我使用(is-empty)代替真正的elisp方法。这样做的正确方法是什么?
由于
答案 0 :(得分:39)
因为在elisp中,String是一个int数组,所以可以使用
(= (length user-str) 0)
你也可以使用(string =)通常更容易阅读
(string= "" user-str)
同样有效,但有点慢:
(equal "" user-str)
答案 1 :(得分:4)
答案 2 :(得分:4)
我把这个放在我的utils.lisp:
中(defun empty-string-p (string)
"Return true if the string is empty or nil. Expects string."
(or (null string)
(zerop (length (trim string)))))
然后我做了:
(not (empty-string-p some-string))
答案 3 :(得分:2)
我不确定测试它的规范方法是什么,但你可以使用长度函数并检查你的字符串的长度是否大于零:
(length "abc")
=> 3
(length "")
=> 0
如果你想在测试前删除空格,EmacsWiki elisp cookbook有an example of a trim function。
答案 4 :(得分:2)
从emacs 24.4开始,有两个不同的函数可供您调用,具体取决于您所说的“空”。
(string-empty-p " ")
nil
(string-blank-p " ")
0
我在查找要链接的文档时遇到了麻烦,但是emacsredux.com提供了更多信息。