F: Wie testet man die Gleichheit von Zeichenfolgen, ignoriert aber die Groß- und Kleinschreibung?
Ich habe eine Situation, in der ich Zeichenfolgen vergleichen möchte, aber Groß- und Kleinschreibung ignorieren möchte. Der Fall ist wichtig für string-equal
und anscheinend unempfindlich gegenüber case-fold-search
:
(string-equal "string" "StrinG") ; => nil
(let ((case-fold-search t))
(string-equal "string" "StrinG")) ; => nil
Ich könnte die Zeichenfolgen immer vorverarbeiten (z. B. mit downcase
), bevor ich sie vergleiche:
(string-equal (downcase "string")
(downcase "StrinG")) ; => t
Aber das scheint übertrieben, wenn man jedes Mal zwei zusätzliche Funktionsaufrufe ausführt. Habe ich irgendwo die relevante Prädikatfunktion übersehen?
Antworten:
Sie können verwenden
compare-strings
:Verwenden Sie
nil
s für Start und Ende, um die gesamten Zeichenfolgen zu verwenden.quelle
nil
s verwenden kann, wie Sie erwähnt haben. Ich werde die Frage etwas länger offen lassen, falls es eine andere Option gibt, die keine 4 zusätzlichennil
s in einem Funktionsaufruf erfordert .Verwendung
string-suffix-p
:Viel einfacher und benötigt keine 4
nil
s. Es wird nicht getestet, ob Zeichenfolgen per se gleich sind ((string-suffix-p "word" "buzzword" t) ⇒ t
). In einigen Fällen sollte dies jedoch ausreichen (wenn Sie nur ein begrenztes Wörterbuch zur Überprüfung haben).quelle
(string-suffix-p "strinG" "this string" t)
kehrt auch zurückt
. Dies ist nicht das, was das OP will. Ich schlage vor, dass Sie diese Antwort entweder ändern oder löschen.string-{prefix,suffix}-p
es in vielerlei Hinsicht nützlich sein kann: Testen Sie, ob das Wort am Punkt Tastatur ist (in SQL zum Beispiel, wo Groß- und Kleinschreibung gemischt werden kann) usw.Eine weitere kurze Alternative:
equalp
ist die Abkürzung fürcl-equalp
; von(documentation 'equalp)
:quelle