2009-06-19 27 views
21

Chciałbym napisać instrukcję if, która zrobi coś na podstawie tego, czy łańcuch znaków jest pusty. Na przykład:Jak sprawdzić, czy ciąg znaków jest pusty w 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)) 

W tym wymyślonym przykładzie używam (jest pusta) zamiast prawdziwej metody eliptycznej. Jaki jest właściwy sposób na zrobienie tego?

Dzięki

Odpowiedz

33

Ponieważ w Elisp, ciąg jest int array, można użyć

(= (length user-str) 0) 

Można również użyć (string =), który jest zwykle łatwiejsze do odczytania

(string= "" user-str) 

Równe działa również, ale nieco wolniej:

(equal "" user-str) 
1

Nie jestem pewien, co kanoniczny sposób testowania to jest, ale można użyć funkcji długości i sprawdzić, czy długość ciąg jest większa niż zero:

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

na EmacsWiki Elisp kucharska ma an example of a trim function if chcesz usunąć białe spacje przed testowaniem.

3

Jeśli pracujesz z ciągami silnie w swoim kodzie, zdecydowanie zalecam używanie biblioteki manipulacyjnej stringów Magnar Sveen o s.el.

s-blank? sprawdza czy ciąg jest pusty:

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

trzymam ten w moim 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))))) 

wtedy zrobić:

(not (empty-string-p some-string)) 
Powiązane problemy