如何检查Emacs Lisp中的字符串是否为空?

时间:2009-06-19 19:57:39

标签: emacs elisp

我想写一个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方法。这样做的正确方法是什么?

由于

5 个答案:

答案 0 :(得分:39)

因为在elisp中,String是一个int数组,所以可以使用

(= (length user-str) 0)

你也可以使用(string =)通常更容易阅读

(string= "" user-str)

同样有效,但有点慢:

(equal "" user-str)

答案 1 :(得分:4)

如果您在代码中大量使用字符串,我强烈建议您使用Magnar Sveen的s.el字符串操作库。

s-blank?检查字符串是否为空:

(s-blank? "") ; => t

答案 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提供了更多信息。