代码之家  ›  专栏  ›  技术社区  ›  oneself

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

  •  24
  • oneself  · 技术社区  · 15 年前

    我想编写一个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 回复  |  直到 6 年前
        1
  •  36
  •   mihi    15 年前

    因为在elisp中,字符串是int数组,所以可以使用

    (= (length user-str) 0)
    

    您还可以使用(string=)这通常更容易阅读。

    (string= "" user-str)
    

    同样有效,但有点慢:

    (equal "" user-str)
    
        2
  •  4
  •   Mirzhan Irkegulov    11 年前

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

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

    (s-blank? "") ; => t
    
        3
  •  4
  •   Joe    9 年前

    我把这个放在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))
    
        4
  •  2
  •   Brighid McDonnell    12 年前

    我不确定测试这是什么标准方法,但是您可以使用length函数并检查字符串的长度是否大于零:

    (length "abc")  
    => 3
    (length "")  
    => 0
    

    emacswiki elisp食谱 an example of a trim function 如果要在测试前删除空白。

        5
  •  1
  •   Gina White    6 年前

    从Emacs24.4开始,您可以调用两个不同的函数,这取决于您所说的“空”是什么意思。

    (string-empty-p " ")
    nil
    
    (string-blank-p " ")
    0
    

    我找不到要链接的文档,但是 emacsredux.com 有更多信息。