2009-06-19 180 views
21

我想寫一個if語句,根據字符串是否爲空來做一些事情。例如:如何檢查Emacs Lisp中的字符串是否爲空?

(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方法。這樣做的正確方法是什麼?

感謝

回答

33

因爲在elisp的,一個字符串是一個int數組,你可以使用

(= (length user-str) 0) 

您也可以使用(字符串=),這是通常更容易閱讀

(string= "" user-str) 

平等的作品也是如此,但有點慢:

(equal "" user-str) 
1

我不知道是什麼測試此現象的典型方式是,但是你可以使用長度的功能和檢查,看看是否你的字符串的長度大於零:

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

的EmacsWiki elisp的食譜有an example of a trim function如果你想在測試之前刪除空格。

3

如果您在代碼中大量使用字符串,我強烈建議使用Magnar Sveen的s.el字符串操作庫。

s-blank?檢查字符串爲空:

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

我把這個在我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)) 
相關問題