P: como um teste de igualdade de cadeia de caracteres mas ignora maiúsculas e minúsculas?
Eu tenho uma situação em que eu gostaria de comparar strings, mas ignorar maiúsculas e minúsculas. O caso é significativo string-equal
e, aparentemente, é insensível a case-fold-search
:
(string-equal "string" "StrinG") ; => nil
(let ((case-fold-search t))
(string-equal "string" "StrinG")) ; => nil
Eu sempre podia pré-processar as strings (digamos, com downcase
) antes de compará-las:
(string-equal (downcase "string")
(downcase "StrinG")) ; => t
Mas isso parece um exagero ao fazer duas chamadas de função extras todas as vezes. Eu negligenciei a função de predicado relevante em algum lugar?
Respostas:
Você pode usar
compare-strings
:Use
nil
s para começar e terminar para usar as strings inteiras.fonte
nil
s como você mencionou. Deixarei a questão em aberto um pouco mais, caso haja outra opção que não exija 4nil
s extras em uma chamada de função.Use
string-suffix-p
:Muito mais simples e não requer 4
nil
s. Ele não testa se as strings são iguais per se ((string-suffix-p "word" "buzzword" t) ⇒ t
). Embora, em alguns casos, isso seja suficiente (se você tiver um dicionário limitado para verificar).fonte
(string-suffix-p "strinG" "this string" t)
também retornat
. Não é isso que o OP quer. Sugiro que você modifique ou exclua esta resposta.string-{prefix,suffix}-p
pode ser útil de várias maneiras: teste se a palavra no momento é fornecida com teclado (no SQL, por exemplo, onde o caso pode ser misturado) etc.Outra alternativa curta:
equalp
é a abreviação decl-equalp
; de(documentation 'equalp)
:fonte