2009-06-19 10 views
21

Je voudrais écrire une instruction if qui fera quelque chose de base sur si une chaîne est vide. Par exemple:Comment vérifier si une chaîne est vide dans 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)) 

utilisées dans cet exemple, j'utilise (est vide) à la place de la vraie méthode de elisp. Quelle est la bonne façon de faire cela?

Merci

Répondre

33

Depuis dans elisp, une chaîne est un tableau int, vous pouvez utiliser

(= (length user-str) 0) 

Vous pouvez également utiliser (string =) qui est généralement plus facile à lire

(string= "" user-str) 

Egal fonctionne également, mais un peu plus lentement:

(equal "" user-str) 
1

Je ne suis pas sûr de ce que la façon canonique de tester ça, mais vous pouvez utiliser la fonction de longueur et vérifiez si votre longueur de chaîne est supérieure à zéro:

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

livre de cuisine du EmacsWiki a an example of a trim function si vous voulez supprimer les espaces avant de tester.

3

Si vous utilisez beaucoup de chaînes dans votre code, je vous recommande fortement d'utiliser la bibliothèque de manipulation de chaînes s.el de Magnar Sveen.

s-blank? vérifie si la chaîne est vide:

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

je garde celui-ci dans mon 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))))) 

je fais:

(not (empty-string-p some-string)) 
Questions connexes