T: bagaimana cara seseorang menguji kesetaraan string tetapi mengabaikan case?
Saya punya situasi di mana saya ingin membandingkan string tetapi abaikan case. Kasus penting untuk string-equal
, dan tampaknya tidak peka terhadap case-fold-search
:
(string-equal "string" "StrinG") ; => nil
(let ((case-fold-search t))
(string-equal "string" "StrinG")) ; => nil
Saya selalu bisa memproses terlebih dahulu string (katakanlah, dengan downcase
) sebelum membandingkannya:
(string-equal (downcase "string")
(downcase "StrinG")) ; => t
Tapi itu sepertinya terlalu banyak melakukan dua panggilan fungsi ekstra setiap waktu. Sudahkah saya mengabaikan fungsi predikat yang relevan di suatu tempat?
Jawaban:
Anda bisa menggunakan
compare-strings
:Gunakan
nil
s untuk memulai dan mengakhiri untuk menggunakan seluruh string.sumber
nil
s seperti yang Anda sebutkan. Saya akan membiarkan pertanyaan terbuka sedikit lebih lama jika ada opsi lain yang tidak memerlukan 4 ekstranil
dalam panggilan fungsi.Gunakan
string-suffix-p
:Jauh lebih sederhana dan tidak membutuhkan 4
nil
detik. Itu tidak menguji apakah string sama per se ((string-suffix-p "word" "buzzword" t) ⇒ t
). Meskipun, dalam beberapa kasus ini harus memadai (jika Anda memiliki kamus terbatas untuk memeriksa).sumber
(string-suffix-p "strinG" "this string" t)
juga kembalit
. Ini bukan yang diinginkan OP. Saya sarankan Anda memodifikasi atau menghapus jawaban ini.string-{prefix,suffix}-p
dapat berguna dalam banyak hal: menguji apakah kata pada titik diberikan keyboard (dalam SQL misalnya di mana case dapat dicampur) dll.Alternatif pendek lainnya:
equalp
kependekan daricl-equalp
; dari(documentation 'equalp)
:sumber